在R

时间:2018-09-16 09:47:58

标签: r save workspace tidytext

我正在一个工作区很大的项目上。不幸的是,我无法保存工作区,并且冻结了。如果我的工作区很小,我可以只用一个数据框来做save.image()

>library(dplyr); library(tidyr);library(tidyverse);library(tidytext);library(pryr)
>master = readRDS("data")
> pryr::object_size(master)
527 MB
>save.image(safe=F)
> pryr::mem_used()
682 MB
> memory.limit()
[1] 8142

大约需要10秒钟,但是可以保存116 MB压缩的.Rdata文件。另外,如果我尝试save.image(compress=F),则只需不到一秒钟的时间。

> master_tidy = master %>% unnest_tokens(word, text)
> pryr::object_size(master_tidy)
565 MB
> pryr::mem_used()
758 MB

现在,如果我尝试运行save.image()save.image(compress=F),它将卡住,并且我必须终止R,因为停止请求也不起作用。如果运行任务管理器,我确实会看到R卡住时它使用100+ MB / s的磁盘和2%的CPU(取决于压缩类型),但即使15分钟后它仍在运行save.image()。另外,我在目录中看到.RdataTmp文件,并尝试save.image(safe=F)无济于事。我感到很奇怪,在我unnest_tokens()之后,我无法再使用save.image(),但是我无法使用摇摇枪的整洁文本示例来重新创建此示例,所以我不确定问题出在哪里。

1 个答案:

答案 0 :(得分:0)

我怀疑您可能不喜欢我在这里的答案,但是也许其中的想法可以以他们帮助我的方式帮助您!您所遇到的问题以一种具体的方式表明,保存R工作区(作为跟踪工作或节省时间的一种方式)不适合用于数据分析工作流。

您可以采用工作流程where your R script is the "real" thing,而不是像可以在任何未知状态下随时打开R工作区(“真实”的东西?)那样进行分析,使用,跟踪,保存等。

引用ESS manual

  

源代码是真实的。对象是源代码的实现。每个用户修改的对象的源都放在一个或多个特定目录中,以供以后编辑和检索。

Jenny Bryan's excellent blog post借来的一些替代习惯

  • 退出R时不要保存.RData,启动R时不要加载.RData
  • 经常重启R并从顶部运行脚本
  • 是否需要花费很长时间才能创建对象?编写一个单独的脚本来创建它,并使用saveRDS()
  • 将对象保存到文件中