我有一些关于数据框处理的操作,希望使用 mclapply()
或其他类似的 lapply()
函数加速。对我来说,最简单的方法之一是将数据框的每一行作为列表中的一个小数据框。我可以使用 plyr
很容易地实现这一点:
df <- data.frame( a=rnorm(1e4), b=rnorm(1e4))
require(plyr)
system.time(myList <- alply( df, 1, function(x) data.frame(x) ))
一旦我的数据被转换成列表,我就可以轻松地执行以下操作:
mclapply( myList, function(x) doSomething(x$a) )
这个方法效果很好,但是我的数据量非常大,adply()
步骤非常慢。我尝试在 adply
步骤上使用多核并行后端,但即使我注册了 8 个处理器,它也从未使用过一个以上的处理器。我怀疑并行选项可能无法处理这种类型的问题。
有什么建议可以让这个过程更快吗?也许用基本的 R 解决办法?
alply(df, 1, function(x) doSomething(x), .parallel = TRUE)
? - hadley