加载工作空间时出现“错误的幻数”错误的原因,如何避免?


93

我试图加载我的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. 我在bootcamp分区上运行Windows XP的MacBook Pro上运行R 2.15.1。
  2. 这个工作区文件显然有问题,因为它的大小只有〜80kb,而我所有的其他文件通常都大于10,000
  3. 上周末,我在R中运行一个外部建模程序,并将其输出存储到不同的对象。我在几天的过程中对模型进行了多次迭代,例如output_Saturday <-call_model()
  4. 模型输出没有什么特别的,它只是一个带有beta,VC矩阵,模型规范等插槽的列表。

9
猜猜:这不是工作区文件,而是R命令的日志。
Joshua Ulrich 2012年

4
我怀疑相同,请尝试使用source(filename)而不是加载它load(filename)
nograpes 2012年

Bummmer-必须检查。我希望我可以声称这是一个初学者的错误。
N Brouwer

1
类似于@JoshuaUlrich所说的一样,我吃了load一些我以前吃过的东西write.table而不是saveed并得到了这个错误。哎呀。
同构

当我加载同一个数据库得到这个错误load,在这里loadDb应该使用。
mt1022 '17

Answers:


112

我不小心使用load()而不是source()或时遇到了该错误readRDS()


3
当我不小心使用load()而不是时,我也是如此read.csv()。:p
Waldir Leoncio 2014年

35
当我不小心使用load()而不是使用时,我也是第2部分readRDS()(是的,9个月后,我因同样的错误而回到这里)。
Waldir Leoncio

34

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

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

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


2
这是非常有用的!
wolfsatthedoor

就是这样
user2961927

谢谢!就我而言,这很有帮助(刚刚从ubuntu存储库中安装了R-并尝试使用另一种较新的R版本打开几周前在另一台计算机上创建的RData文件)
lebatsnok

18

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

如果您要加载的文件不是R脚本,则应使用该脚本

source("myfile.ext")

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

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

9

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

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


6

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


1
不错的窍门...我不得不尝试几个packs函数,但是readr::它很容易浏览这些函数。readr::read_rds最终对我有用。
马特·班纳特

4

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

object <- readRDS("object.rds")

2

构建R包时出现错误(使用roxygen2)

在我的情况下,原因是我保存data/mydata.RDatasaveRDS()而不是save()。例如save(iris, file="data/iris.RData")

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

还要注意,使用save()/时,load()该对象以与最初保存时的名称相同的名称加载(即,您不能以它最初保存时的名称将其加载到R环境中之前,对其进行重命名)。



0

如果正在使用,请devtools尝试使用以下方法保存文件:

devtools::use_data(x, internal = TRUE)

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

从文档:

内部如果为FALSE,则将每个对象保存在数据目录中的各个.rda文件中。这些在加载包时都可用。如果为TRUE,则将所有对象存储在单个R / sysdata.rda文件中。这些对象仅在包装内可用。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.