我正在使用大型数据集,经常在我的工作站和笔记本电脑之间切换。将工作区图像保存到.RData对我来说是最自然和最方便的方式,因此这是我想要在两台计算机之间同步的文件。
不幸的是,它往往相当大(几GB),因此高效的同步要求我用笔记本电脑连接笔记本电脑或用USB记忆棒移动文件。如果我在工作站旁边忘记同步我的笔记本电脑,我需要花费数小时来确保所有内容都是同步的。
然而,最大的对象变化相对较少(尽管我经常使用它们)。我可以将它们保存到另一个文件,然后在保存会话之前删除它们并在恢复会话后加载它们。这会起作用,但会非常烦人。此外,我必须记住在修改时保存它们。它很快就会变成一团糟。
是否有更有效的方法来处理如此大的数据块?
例如,如果有.RData的替代格式,我的问题就会解决 - 其中.RData是一个目录,而该目录中的文件是要加载的对象。
答案 0 :(得分:3)
您可以使用saveRDS
:
objs.names <- ls()
objs <- mget(objs.names)
invisible(
lapply(
seq_along(objs),
function(x) saveRDS(objs[[x]], paste0("mydatafolder/", objs.names[[x]], ".rds"))
) )
这会将会话中的每个对象保存到&#34; mydatafolder&#34;文件夹作为单独的文件(确保手头创建文件夹)。
不幸的是,这会修改所有对象的时间戳,您不能依赖rsync
。您可以先使用readRDS
阅读对象,查看哪些对象已更改为identical
,并且仅在更改的对象上运行上面的lapply
,以便您可以使用{{1}之类的内容}}