R中的并行版本的变换(或变异)?

时间:2014-06-22 02:41:26

标签: r parallel-processing

我有一个缓慢的函数,我想应用于data.frame中的每一行。计算是令人尴尬的平行。

我有4个核心,但R内置的功能只使用一个。

我想做的就是与...平行相当:

data$c = slow.foo(data$a, data$b)

我无法找到关于使用哪个库(选择不堪重负)以及如何使用它的明确说明。任何帮助将不胜感激。

1 个答案:

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

您也可以使用parSapplyparLapply

当然,对于我给出的示例,向量化操作d$x1 - d$x2 更多更快。考虑一下您的流程是否可以进行矢量化而不是逐行执行。