加载工作区时出现“魔数错误”的原因及如何避免?

我试图加载我的 R 工作区,但是收到了这个错误:

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

我对技术细节不是特别感兴趣,但主要是我是如何引起它的,以及我如何在将来防止它。以下是一些关于这种情况的说明:

  1. 我在一台 MacBook Pro 上运行 R 2.15.1,在一个引导分区上运行 Windows XP。
  2. There is something obviously wrong this workspace file, since it weighs in at only ~80kb while all my others are usually >10,000
  3. 周末我用 R 语言运行了一个外部建模程序,并将其输出存储到不同的对象中。我在几天的过程中运行了该模型的几次迭代,例如 output _ Saturday <-call _ model ()
  4. 对于模型输出没有什么特别的,它只是一个带有 Beta、 VC 矩阵、模型规范等插槽的列表。
198828 次浏览

假设您的文件名为“ myfile.ext”

如果您试图加载的文件不是 R 脚本,那么您将使用

source("myfile.ext")

you might try the readRDSfunction and assign it to a variable-name:

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

这个神奇的数字来自 UNIX 类型的系统,其中文件的前几个字节包含一个指示文件类型的标记。

此错误表明您正试图将无效的文件类型加载到 R 中。由于某种原因,R 不再将此文件识别为 R 工作区文件。

当我不小心使用 load()而不是 source()readRDS()时,我得到了这个错误。

如果您正在使用 devtools,请尝试使用以下命令保存文件:

devtools::use_data(x, internal = TRUE)

然后,删除以前保存的所有文件。

来自文档:

internal If FALSE, saves each object in individual .rda files in the data directory. These are available whenever the package is loaded. If TRUE,将所有对象存储在一个 R/sysdata.rda 文件中 仅在包中可用

Install the readr package, then use library(readr).

当您尝试 load()一个 rds 对象而不是使用

object <- readRDS("object.rds")

当我在 R 的旧版本中保存 Rdata 文件时遇到了这个问题,然后我尝试在新版本中打开它。我通过将 R 版本更新到最新版本来解决这个问题。

I got the error when saved with saveRDS() rather than save(). E.g. save(iris, file="data/iris.RData")

这为我修复了问题。我发现这个信息 给你

还要注意的是,使用 save()/load()时,对象加载时使用的名称与最初保存时相同(也就是说,只有在已经以最初保存时的名称加载到 R 环境中时,才能重命名它)。

R Core Team 总结了3.5.0(给你)之后 R 版本变化的文档中还有以下内容值得注意:

R has new serialization format (version 3) which supports custom serialization of ALTREP 框架对象... 在3.5.0之前的 R 版本无法读取格式3中的序列化数据。

当我在 v3.6.0中保存一个工作区,然后与使用 v3.4.2的同事共享该文件时,我遇到了这个问题。我可以通过在保存函数中添加“ version = 2”来解决这个问题。

更新 R 和 R Studio 版本以及在先前版本下创建的已加载文件时发生此错误。所以我重新安装了我以前的 R 版本,一切都按计划进行。