我目前正在运行许多如下所示的应用行:
test=data.frame(t=seq(1,5,1),e=seq(6,10,1))
mean(apply(test,2,mean))
我想将第二行转换为 mclapply,它产生与 lapply 相同的结果。我意识到我可以使用 for 循环从 lapply 语句中提取每个项目,然后在该向量上使用均值,但这会降低我试图通过使用 mclapply 来改进的性能。问题是 lapply 和 mcapply 都返回一个列表,这意味着不能使用。我可以使用 [[]] 来获取实际值,也可以使用 test$t 和 test$e,但 test 中的列数是可变的,通常超过 1,000。必须有一种更简单的方法来处理这个问题。基本上我想得到这个陈述的意思:
mclapply(test,mean,mc.preschedule=TRUE)
最好不要生成新变量或使用 for 循环。该解决方案应等效于获取此语句的平均值:
lapply(test,mean)
最佳答案
我很困惑—— 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
,不是吗?关于r - 提取 lapply 或 mclapply 结果,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3613368/