我的计算集群最近更新到 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/