问题描述
我正在使用 foreach 将我的工作并行化为一个非常大的数据集。代码如下:
d <-
foreach(a=files,.packages = 'hdf5r',.combine = 'cbind') %:%
foreach(b=files,.combine = 'c') %dopar% {
values <- "perform calculations"
}
d
我得到的输出是矩阵的形式……这是外部 foreach 中的“cbind”组合函数的结果。见附图。
但是,我真正想做的是能够将每次迭代结果保存在独立的 .csv 或 .txt 文件中。
我尝试使用用户定义的函数来替换“cbind”,但没有成功。我还将 write.table(......) 放在代码主体中,但它只捕获最后一次迭代,我不确定在嵌套 foreach 中添加另一个 for 循环是否是好的做法。
谢谢。
结果:
What I am getting from the script above
期望:
What I need to save in individual .csv
解决方法
尝试类似以下的操作。未经测试,但我以前使用过它,它可以工作,或者至少给出一个关于如何制作它的想法。
最里面的foreach
必须返回一个值,把values
作为它的最后一条指令。
文件名是我选择的,随意更改。
d <- foreach(a=files,.packages = 'hdf5r',.combine = 'cbind') %dopar% {
tmp <- foreach(b=files,.combine = 'c') %dopar% {
values <- "perform calculations"
values
}
fname <- paste("result",i,"csv",sep = ".")
fname <- file.path("~/tmp",fname)
write.csv(tmp,fname,row.names = FALSE)
# return value to outer loop
tmp
}
d
注意,如果没有最后一个 tmp
,返回到最外层循环,d
将是 NULL
。