我有一个缓慢的函数,我想应用于data.frame中的每一行。计算是令人尴尬的平行。
我有4个核心,但R内置的功能只使用一个。
我想做的就是与...平行相当:
data$c = slow.foo(data$a, data$b)
我无法找到关于使用哪个库(选择不堪重负)以及如何使用它的明确说明。任何帮助将不胜感激。
答案 0 :(得分:3)
基础R包含parallel
包。以下是使用该包中的parApply
的简单示例:
library(parallel)
# Some dummy data
d <- data.frame(x1=runif(1000), x2=runif(1000))
# Create a cluster with 1 fewer cores than are available. Adjust as necessary
cl <- makeCluster(detectCores() - 1)
# Just like regular apply, but rows get sent to the various processes
out <- parApply(cl, d, 1, function(x) x[1] - x[2])
stopCluster(cl)
# Same as x1 - x2?
identical(out, d$x1 - d$x2)
# [1] TRUE
您也可以使用parSapply
和parLapply
。
当然,对于我给出的示例,向量化操作d$x1 - d$x2
更多更快。考虑一下您的流程是否可以进行矢量化而不是逐行执行。