我有一个Rscript以平面文件的形式读取恒定数据流。另一个脚本拾取这个平面文件,进行一些解析和处理,然后将结果保存为RDS格式的data.frame。它然后睡觉,并重复这个过程。将新数据追加到R中的现有数据帧(RDS)
saveRDS(tmp.df, file="H:/Documents/tweet.df.rds") #saving the data.frame
在第二次...第n次迭代中,我只有代码处理自上次迭代以来添加到平面文件的新行。但是,为了将增量行附加到永久数据框中,我必须将其读入,追加,然后将其保存出来,覆盖原始数据。
df2 <- readRDS("H:/Documents/tweet.df.rds") #read in permanent
tmp.df2 <- rbind(df2, tmp.df) #append new to existing
saveRDS(tmp.df2, file="H:/Documents/tweet.df.rds") #save it
rm(df2) #housecleaning
rm(tmp.df2) #housecleaning
这种做法是有风险的,因为每当RDS为您开放,读/写,另一个想触摸到了文件的过程必须等待。随着基础文件变大,风险增加。
是否有像appendRDS
(我知道字面上没有)可以实现我想要的 - 迭代更新单个数据帧 - 保存到文件 - 使用附加而不是完全替换?
嗯,我想你首先做的是坏事。您将覆盖以前的数据,从而有效地删除以前的版本。这就是说,为什么不直接用'write.table'将文本保存为文本格式(例如CSV),这允许附加到现有文档? –
我实际上用先前数据的拷贝覆盖了以前的数据到最新的记录。希望我的第二部分内容显示这个过程 - 旧的读取,追加新的旧的旧的+新的旧的。 我现在看到write.table附加选项。我已经远离了非本地格式,因为我认为这会增加处理开销。不过,我可能会为了更好的稳定性而采取一些低效率的措施。 –
我不知道是否有一些带有?serialize的魔法可以用来创建追加函数。 –