2012-04-05 3 views
1

Я не нашел удовлетворительного ответа на этот вопрос. Предполагая, что я функция:Передача аргумента списка для llply

foo <- function(a,b,c) { 
... 
} 

a список, содержащий множество объектов data.frame

b является список, содержащий специальный класс данных (класс ppp из библиотеки spatstat, если это помогает любому).

c - целое число.

и я хочу, чтобы подтолкнуть список с помощью этой функции:

result <- llply(a, foo, b,c) 

Названия элементов списка в b соответствует колонку «типа» в data.frames в списке a. Так что внутри функции foo я могу быстро сделать:

id <- which(names(b) == unique(a$type)) 
baseline_pattern <- b[[id]] 

, чтобы соответствовать каждой основной пространственной структуры в б с правой data.frame в а. Есть около 10 предметов в b и 1000 предметов в a. К сожалению, это не работает, потому что llply (или lapply в целом) пытается нажать один элемент списка на a времени, даже для списка аргументов b, и две строки кода, соответствующие правильному элементу списка в b, с правильным фреймом данных, функция больше не имеет весь список b. Есть ли способ обойти это?

В крайнем случае, я мог бы создать еще один список (эффективно сочетая a и b), где каждый элемент списка представляет собой список с длиной 2, содержащий data.frame и соответствующий объект точки шаблона. Но это приведет к 1000-кратным избыточным копиям (и сделает эту операцию на кластере гораздо менее эффективной).

UPDATE: Я планирую превратить это в mclapply, чтобы запустить это на кластере. Я не могу сделать это с помощью mapply (если не существует mcmapply).

+0

Как оказалось, в R 2.15.0 есть «mcmapply». Время обновления ...? –

ответ

1

Я еще не проснулся, но похоже, что вы хотите использовать mapply с MoreArgs=list(b, c).