提取lapply或mclapply结果

时间:2010-08-31 21:26:54

标签: r

我目前正在运行许多看起来像这样的应用行:

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)

2 个答案:

答案 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()