【发布时间】:2014-03-04 21:00:45
【问题描述】:
提前致谢。
我有一个三个嵌套的 for 循环,其中最低的一个包含条件 if 语句评估。
代码运行成功,尽管使用 1 个 foreach 循环和 2 个嵌套 for 循环非常缓慢。对于我的“真实”数据,我可以在大约 16 小时内运行 ~ 1000 x 2000 x 160 次迭代。我想将其缩放到 ~ 10000 x 2000 x 160,这将需要很长时间才能运行(>100 小时)。理想情况下,我想将嵌套的 for 循环转换为 apply 循环,因为我知道它们运行得更快。我构建的示例代码如下:
library("foreach")
library("doMC")
registerDoMC()
R = 10
N = 5
M = 10
data_matrix <- matrix(data=runif(50,N,M),ncol=10)
cos_function<- function(x,y){
res<-runif(1,3,5)
res<-res + (3/x) + (4/y)
return(res)
}
results<-foreach(k=1:R,combine=rbind) %dopar% {
dummy<-matrix(0, N, M)
for (i in 1:N) {
for (j in 1:M) {
if (cos_function(i, j) <= data_matrix[i,j]) {
dummy[i,j] = 1
}
}
return(dummy)
}
我在想出加快这个过程的方法时遇到了很多麻烦:即包括嵌套循环的并行化、切换到嵌套应用函数、将嵌套循环组合成一个应用循环。您可能会说,我对 R 和并行化非常陌生,因此任何指导都会非常有帮助。
【问题讨论】:
-
如果您将此问题扩展到 10000 x 2000 x 160,您将遇到一些严重的内存挑战。我什至不确定是否可以在 R 中创建这么大的矩阵,即使您的计算机中有足够的内存。
标签: r foreach parallel-processing apply