ifr*_*eak 7 parallel-processing foreach r
我在使用并行处理将值附加到数据框时遇到问题.
我有一个函数会做一些计算并返回一个数据帧,包括这些计算是一个随机抽样.
所以我做的是:
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)
Run Code Online (Sandbox Code Playgroud)
当我查看结果时resdf,它是空的
如果我更换%dopar%与%do%结果被正确地计算,但它太慢了..
反正有没有提高这一点?
Spa*_*man 14
我想你需要阅读文档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]
Run Code Online (Sandbox Code Playgroud)
小智 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) )
}
Run Code Online (Sandbox Code Playgroud)
希望能帮助到你!
| 归档时间: |
|
| 查看次数: |
8186 次 |
| 最近记录: |