r - 使用 `saveRDS()`写入文件,以便向后兼容旧版本的R

标签 r

我的计算集群最近更新到 R 版本 R 3.6.0 并删除了旧版本的 R。我一直在 R 3.4.0 中运行我的项目。我认为这没问题,运行了一些代码,并将 R 3.6.0 session 期间的输出保存为:

saveRDS(output, output.path)

然后,该文件被传输到另一台计算机上,在其中进行交互式 R 使用。此计算机运行 R/3.4.0,并且无法更新 R 版本。当我打开上面的文件时,出现以下错误:

readRDS(output.path)
Error in readRDS(output.path) : cannot read workspace version 3 written by R 3.6.0; need R 3.5.0 or newer

这真是太糟糕了。我不是这些计算机上的系统管理员,所以我不能只同步版本。这是我的问题:

有没有办法在 R 3.6.0 中使用 saveRDS() 编写文件,以便在 R 3.4.0 环境中向后兼容?

最佳答案

通过演示扩展我的评论:

$ Rscript --version | head -1
R scripting front-end version 3.6.0 (2019-04-26)
$ Rscript -e 'saveRDS(1:10, file="foo.rds")'
$
$ docker run --rm -ti r-base:3.4.0 Rscript --version | head -1
R scripting front-end version 3.4.0 (2017-04-21)
$ docker run --rm -ti -v ${PWD}:/work -w /work r-base:3.4.0 Rscript -e 'print(readRDS("foo.rds"))'
Error in readRDS("foo.rds") :
  cannot read workspace version 3 written by R 3.6.0; need R 3.5.0 or newer
Calls: print -> readRDS
Execution halted
$
$ Rscript -e 'saveRDS(1:10, file="foo.rds", version=2)'
$ docker run --rm -ti -v ${PWD}:/work -w /work r-base:3.4.0 Rscript -e 'print(readRDS("foo.rds"))'
 [1]  1  2  3  4  5  6  7  8  9 10
$

我使用正常的 R 版本,显示为 3.6.0,然后通过 Rocker 启动 R 3.4.0,也显示其版本。

正如预期的那样,它首先失败 - 一旦使用 version=2 重新保存数据,它就会按预期工作。

关于r - 使用 `saveRDS()`写入文件,以便向后兼容旧版本的R,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56704638/

相关文章:

r - DataBricks 中将 R 数据帧转换为 Spark 数据帧是否有大小限制?

r - enet() 有效,但通过 caret::train() 运行时无效

R按列中的数字对数据进行分组

c++ - 将静态库链接到 R 中

r - 使用数据帧的 R 中的 EWMA 波动性

r - 如何在 R 中使用 seqIplot 配置 y 轴?

r - 使用 Impala 连接时区在数据框中更改为 GMT

c# - C# 和 R 的 Gzip 字节数组不同

r - 在 R 中快速将大向量分割成 block

javascript - R 中 javascript reduce 的等价物