当我们需要储存 R 语言的数据文件时,通常会使用 save() 函数储存为 .rda 文件的格式,然后读取时再使用 load() 函数进行读取。

通常情况下,这样做是完全不会有问题的,但最近遇到了一个之前未曾遇到过的很诡异的错误:

Error: bad restore file magic number (file may be corrupted) -- no data loaded
In addition: Warning message:
file ‘...’ has magic number 'RDX3'
   Use of save versions prior to 2 is deprecated 

于是查找了大量的资料最终定位问题。


解决方案

1. 储存时添加参数

其实问题非常简单,使用 save() 函数储存 .rda 文件时,使用的 R 版本是大于等于 3.5.0 版本的,而读取文件所使用的 R 版本是小于 3.5.0 ,此时就会出现这样的情况。

解决方法一个是,在高版本的 R 下储存数据时,添加参数 version =,指定读取时的 R 版本信息。

save() 参数说明:

Arguments
versionthe workspace format version to use. NULL specifies the current default format (3). Version 1 was the default from R 0.99.0 to R 1.3.1 and version 2 from R 1.4.0 to 3.5.0. Version 3 is supported from R 3.5.0.

如果 .rda 已经储存了出来,此时需要更新读取文件所使用的 R 版本,更新到 3.5.0 以上的版本即可。

2. 更新使用 load() 函数读取端的 R 版本

一些其它的情况

如果针对不是 .rda 文件出现类似的错误,则请不要使用 load() 函数进行读取,而应该使用 source(),或 readRDS() 进行读取,如下所示。

source("myfile.ext")
my.data <- readRDS("myfile.ext")

参考网址

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐