我正在使用foreach将我的工作并行化为一个非常大的数据集。以下是代码:
d <-
foreach(a=files, .packages = 'hdf5r', .combine = 'cbind') %:%
foreach(b=files, .combine = 'c') %dopar% {
values <- "perform calculations"
}
d我得到的输出是矩阵的形式。作为“cbind”组合功能的一个结果,在外部过程中。见附图。
但是,我真正想做的是,能够将每个迭代结果保存在一个独立的.csv或.txt文件中。
我试过用一个用户定义的函数来代替'cbind‘,但是没有成功。我还把write.table(.)在代码的正文中,但是它只捕获了最后一个迭代,我不确定在嵌套的foreach中添加另一个for循环是否是一个好的实践。
有什么聪明的办法来解决我的困境吗?
谢谢。
结果:
所需:
发布于 2021-07-29 11:18:39
试着做下面这样的事情。未经测试,但我以前使用过它,它可以工作,或至少,给出一个想法,如何使它。
内部最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。
https://stackoverflow.com/questions/68574400
复制相似问题