gpt4 book ai didi

r - 使用 foreach 写入 R 中的单个公共(public)文件

转载 作者:行者123 更新时间:2023-12-04 11:18:41 24 4
gpt4 key购买 nike

我在 R 中有一个并行进程,应该将每个线程的结果保存到一个公共(public)文件中。但是这样做会产生问题,因为存在数据重叠。我确实聚合在一个数据框中,最后可以一次写入所有数据,但由于数据很大,我想确保如果系统内存不足或发生其他事情,数据不会丢失。我如何写入一个文件并确保该文件被锁定或异步写入数据。为了以防万一,我在 Windows 上运行我的代码,并使用 doSNOW 进行并行化。

这是主要代码

HedgedPortfolio <- data.frame()
cl<-makeCluster(6)
registerDoSNOW(cl)
no<-length(X)
HedgedPortfolio<-foreach(i=1:no,.combine='rbind') %dopar%
{
HedgeMain(as.Date(X[i]),InitPnlRecon)
}

stopCluster(cl)
HedgeMain<-function(X,InitPnlRecon)
{
OptimizedPort<-.............some computation
write.table(OptimizedPort,file="C:/OptimizedAll.opt",
quote=FALSE,append=TRUE,sep=";",
col.names = FALSE,row.names = FALSE)
OptimizedPort
}

最佳答案

我认为 R write.*cat 函数没有为使用单个目标文件提供必要的文件锁定功能。您要么需要访问支持此类设施的数据库,要么使用多个文件。从节点终止事件中增加的弹性要求来看,在我看来,您真的不想将其作为紧密耦合的进程运行,而是作为分布式批处理进程运行。 High Performance Computing Task View 中有一个“资源管理器和批处理调度程序”部分其中几个包听起来适用于此任务:batchBatchJobs特别是

最近有一个关于 R-Help 和 HPC-SIG 的讨论可能是相关的。线程从这里开始:

https://stat.ethz.ch/pipermail/r-help/2012-September/324748.html

一些线程描述了一种通过单独的 CPU 工作人员访问磁盘文件中间特定点的方法。您仍然需要自己的编码来正确确保您没有覆盖“好数据”。

关于r - 使用 foreach 写入 R 中的单个公共(public)文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12430142/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com