Я не нашел удовлетворительного ответа на этот вопрос. Предполагая, что я функция:Передача аргумента списка для 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
).
Как оказалось, в R 2.15.0 есть «mcmapply». Время обновления ...? –