微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。