我正在开发一个工作空间相当大的项目。不幸的是我无法保存工作区并冻结。如果我有一个小工作区,我可以用一个数据帧来做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()
,但是我不能使用shakespear tidytext示例重新创建这个例子,所以我不确定问题是什么。
我怀疑你可能不喜欢我的答案,但也许它中的想法可以帮助你帮助我!您遇到的问题是以一种具体的方式证明,保存R工作区(作为跟踪工作或节省时间的方法)并不适合数据分析工作流程。
您可以采用您正在使用的工作流程where your R script is the "real" thing,跟踪,保存,而不是使用分析,就好像您可以在某个不太知名的状态下打开R工作区(“真实”的东西?)等等
引用ESS manual:
源代码是真实的。对象是源代码的实现。每个用户修改对象的源都放在一个或多个特定目录中,以便以后编辑和检索。
.RData
并且在启动R时不加载.RData
saveRDS()
将对象保存到文件中