我目前正在运行许多看起来像这样的应用行:
test=data.frame(t=seq(1,5,1),e=seq(6,10,1))
mean(apply(test,2,mean))
我想将第二行转换为mclapply,它产生与lapply相同的结果。我意识到我可以使用for循环从lapply语句中提取每个项目,然后在该向量上使用mean,但这会降低我尝试使用mclapply改进的性能。问题是lapply和mcapply返回一个意味着无法使用的列表。我可以使用[[]]来获取实际值或测试$ t并测试$ e但是test中的列数是可变的,通常运行超过1,000。必须有一种更简单的方法来处理这个问题。基本上我想得到这个陈述的意思:
mclapply(test,mean,mc.preschedule=TRUE)
最好不要生成新变量或使用for循环。解决方案应该等同于获得此声明的平均值:
lapply(test,mean)
答案 0 :(得分:2)
我很困惑 - 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
,不是吗?
答案 1 :(得分:0)
我想将cell.indentationLevel = 2;
结果放在一个列表中,然后将这些列表组合起来形成最终产品:
mclapply()