9

我在使用并行处理将值附加到数据帧时遇到问题。

我有一个函数可以进行一些计算并返回一个数据帧,包括这些计算是随机抽样。

所以我所做的是:

randomizex <- function(testdf)
{
    foreach(ind=1:1000)%dopar%
    {
      testdf$X = sample(testdf$X,nrow(testdf), replace=FALSE)
      fit = lm(X ~ Y, testdf)
      newdf <- rbind(newdf, data.frame(pc=ind, err=sum(residuals(fit)^2) ))

    }

return(newdf)
}
resdf = randomizex(mydf)

当我查看结果时resdf,它是空的

如果我替换%dopar%%do%正确计算的结果,但它太慢了..

反正有没有提高一点?

4

2 回答 2

19

我认为您需要阅读foreach. 您的代码块应该计算单个部分,然后您应该使用该.combine选项来说明如何将它们全部连接在一起。查看 中的示例以help(foreach)获得更多指导。它不是for循环的直接替代品。

例如:

> resultdf = foreach(i=1:10,.combine=rbind)%dopar%{data.frame(x=runif(4),i=i)}
> resultdf
            x  i
1  0.23794248  1
2  0.15536320  1
3  0.58609635  1
4  0.98780497  1
5  0.97806482  2
6  0.92440741  2
7  0.13416121  2
8  0.81598340  2
9  0.13834423  3
[etc]
于 2013-02-11T16:14:46.920 回答
5

您需要修改“foreach 循环”,例如:

newdf = foreach(ind=1:1000, .combine=rbind) %dopar%
{
    testdf$X = sample(testdf$X,nrow(testdf), replace=FALSE)
    fit = lm(X ~ Y, testdf)
    data.frame(pc=ind, err=sum(residuals(fit)^2) )
}

希望能帮助到你!

于 2016-03-16T20:49:11.050 回答