R的save命令行为及输出文件大小因运行环境(RStudio/命令行R)存在差异
为啥R的
save()在RStudio和命令行生成的文件差这么多? 嘿,这个问题我之前碰到过好多次,核心原因就是RStudio和命令行R对save()函数的默认参数设置不一样,具体给你拆解清楚:
1. 压缩和序列化格式在两个环境的默认值不同
R的save()有俩关键参数直接影响文件大小:
compress:控制是否压缩、用啥压缩方式。可选值有TRUE/FALSE、"gzip"、"bzip2"、"xz",不同压缩级别/方式生成的文件大小能差好几倍。ascii:如果设成TRUE,会用ASCII格式存对象,这可比默认的二进制格式大太多了。
你遇到的情况大概率是:命令行R用了默认的gzip压缩(级别6),而RStudio默认要么没开压缩,要么用了更低的压缩级别,所以生成的89M文件其实是未压缩/低压缩版本,命令行的23M是压缩后的结果。
2. 怎么验证这个猜测?
你可以在RStudio和命令行里分别跑这段代码,看看save()的默认参数差异:
# 查看当前环境下save的默认参数配置 args(save)
另外也可以直接在脚本里指定参数测试:
# 强制用和命令行一致的gzip压缩 save(dt, file="test_unified.Rdata", compress = "gzip") # 要是想文件更小,还能试试xz压缩(保存/加载会慢一丢丢) save(dt, file="test_xz.Rdata", compress = "xz")
跑了之后你会发现,不管在哪个环境,指定参数后生成的文件大小完全一样。
3. 怎么让两个环境输出统一?
最简单的办法就是别依赖环境的默认值,在脚本里显式写死save()的参数:
- 想要和命令行一样的小文件:加上
compress = "gzip"(或者compress = TRUE,和gzip等价) - 要是追求保存速度不在乎文件大小:加上
compress = FALSE
这样不管你在RStudio还是命令行跑脚本,生成的.Rdata文件大小就完全一致啦。
内容的提问来源于stack exchange,提问作者AleTama
相关产品推荐
相关产品推荐

