Извлечение результатов lapply или mclapply - PullRequest
3 голосов
/ 01 сентября 2010

В настоящее время я запускаю множество строк применения, которые выглядят так:

test=data.frame(t=seq(1,5,1),e=seq(6,10,1))
mean(apply(test,2,mean))

Я хочу преобразовать вторую строку в mclapply, которая дает тот же результат, что и lapply. Я понимаю, что могу извлечь каждый элемент из оператора lapply с помощью цикла for, а затем использовать среднее значение для этого вектора, но это снизит производительность, которую я пытаюсь улучшить с помощью mclapply. Проблема в том, что lapply и mcapply возвращают список, что означает, что его нельзя использовать. Я могу использовать [[]], чтобы получить фактическое значение, или проверить $ t и проверить $ e, но число столбцов в тесте является переменным и обычно превышает 1000. Должен быть более простой способ справиться с этим. В основном я хочу получить среднее значение этого утверждения:

mclapply(test,mean,mc.preschedule=TRUE)

желательно без генерации новых переменных или использования циклов for. Решение должно быть эквивалентно получению среднего значения этого утверждения:

lapply(test,mean)

Ответы [ 2 ]

2 голосов
/ 01 сентября 2010

Я в замешательстве - data.frame, в конце концов, тоже list. Так что кроме очевидного

R> testdf <- data.frame(t=seq(1,5,1),e=seq(6,10,1))
R> mean(testdf)
t e 
3 8 
R> mean(mean(testdf))
[1] 5.5
R> 

Вы также можете сделать

R> lapply(testdf, mean)
$t
[1] 3

$e
[1] 8

R> mean(unlist(lapply(testdf, mean)))
[1] 5.5
R> 

Так что для внутреннего lapply вы можете использовать mclapply по желанию, нет?

0 голосов
/ 13 июля 2015

Я хотел бы поместить результаты mclapply() в список, а затем объединить эти списки, чтобы сформировать конечный продукт:

results.list <- list()
results.list <- mclapply(listOfData, analysisFunction, mc.cores = 7)

library(data.table)
result <- rbindlist(results.list) 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...