加载工作区时出现"错误的幻数"错误以及如何避免错误?

N B*_*wer 77 workspace r magic-numbers

我试图加载我的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 
Run Code Online (Sandbox Code Playgroud)

我对技术细节并不特别感兴趣,但主要是我如何引起它以及如何在将来阻止它.以下是有关情况的一些注意事项:

  1. 我在一个在训练营分区上运行Windows XP的MacBook Pro上运行R 2.15.1.
  2. 这个工作区文件有明显的错误,因为它的重量只有~80kb,而我的其他文件通常都超过10,000
  3. 在周末,我在R中运行外部建模程序并将其输出存储到不同的对象.我在几天的过程中运行了几次模型迭代,例如output_Saturday < - call_model()
  4. 模型输出没有什么特别之处,它只是一个包含beta用于插槽,VC矩阵,模型规范等的列表.

Chr*_* SH 93

当我意外地使用load()而不是source()或时,我得到了那个错误readRDS().

  • 当我意外地使用`load()`而不是`readRDS()`时,我也是第2部分(是的,9个月后,我回到这里几乎是同样的错误). (26认同)
  • 当我意外地使用`load()`而不是`read.csv()`时,我也是如此.:p (3认同)

小智 16

假设您的文件名为"myfile.ext"

如果您尝试加载的文件不是您要使用的R脚本

source("myfile.ext")
Run Code Online (Sandbox Code Playgroud)

您可以尝试该readRDS函数并将其分配给变量名:

my.data <- readRDS("myfile.ext")
Run Code Online (Sandbox Code Playgroud)


小智 15

同样值得一提的是,R核心团队从文档中总结了v3.5.0之后的R版本的更改(此处):

R具有新的序列化格式(版本3),该格式支持ALTREP框架对象的自定义序列化... 格式3的序列化数据不能被3.5.0之前的R版本读取。

在v3.6.0中保存工作区,然后与使用v3.4.2的同事共享文件时遇到了此问题。通过将“ version = 2”添加到我的保存函数中,我能够解决此问题。

  • 这非常有帮助! (2认同)

DCZ*_*DCZ 8

当您尝试使用load()rds 对象而不是使用时也会发生这种情况

object <- readRDS("object.rds")
Run Code Online (Sandbox Code Playgroud)


Ell*_*ner 6

神奇的数字来自UNIX类型的系统,其中文件的前几个字节持有指示文件类型的标记.

此错误表示您正在尝试将无效的文件类型加载到R中.出于某种原因,R不再将此文件识别为R工作区文件.


小智 6

安装readr包,然后使用library(readr).


use*_*745 5

saveRDS()我在使用而不是保存时收到错误save()。例如save(iris, file="data/iris.RData")

这为我解决了这个问题。我在这里找到了这个信息

另请注意,使用save()/ 时load(),对象会使用与最初保存时相同的名称加载(即,在它已经以最初保存时的名称加载到 R 环境中之前,您无法重命名它)。