更高效的.RData?

时间:2014-03-18 15:59:57

标签: r

我正在使用大型数据集,经常在我的工作站和笔记本电脑之间切换。将工作区图像保存到.RData对我来说是最自然和最方便的方式,因此这是我想要在两台计算机之间同步的文件。

不幸的是,它往往相当大(几GB),因此高效的同步要求我用笔记本电脑连接笔记本电脑或用USB记忆棒移动文件。如果我在工作站旁边忘记同步我的笔记本电脑,我需要花费数小时来确保所有内容都是同步的。

然而,最大的对象变化相对较少(尽管我经常使用它们)。我可以将它们保存到另一个文件,然后在保存会话之前删除它们并在恢复会话后加载它们。这会起作用,但会非常烦人。此外,我必须记住在修改时保存它们。它很快就会变成一团糟。

是否有更有效的方法来处理如此大的数据块?

例如,如果有.RData的替代格式,我的问题就会解决 - 其中.RData是一个目录,而该目录中的文件是要加载的对象。

1 个答案:

答案 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}之类的内容}}