R 中每次 foreach 迭代的 write.csv 结果

问题描述

我正在使用 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