我尝试加载我的 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
我对技术细节不是特别感兴趣,但主要是我如何引起它以及我将来如何防止它。以下是有关情况的一些说明:
我在训练营分区上运行 Windows XP 的 MacBook Pro 上运行 R 2.15.1。这个工作区文件显然有问题,因为它的重量只有~80kb,而我所有的其他文件通常> 10,000 周末我在R中运行一个外部建模程序并将其输出存储到不同的对象。我在几天的时间里对模型进行了多次迭代,例如 output_Saturday <- call_model() 模型输出没有什么特别之处,它只是一个包含 beta、VC 矩阵、模型规范等插槽的列表。
source(filename)
而不是 load(filename)
加载它。
load
ed 了一些我已经write.table
ed 而不是save
ed 的东西并得到了这个错误。哎呀。
load
加载数据库时出现此错误,应该使用 loadDb
。
当我不小心使用 load()
而不是 source()
或 readRDS()
时,我收到了该错误。
同样值得注意的是 R Core Team 的文档中的以下内容,该文档总结了 v3.5.0 (here) 之后 R 版本的变化:
有新的序列化格式(版本 3),它支持 ALTREP 框架对象的自定义序列化...格式 3 的序列化数据不能被 R 版本 3.5.0 之前的版本读取。
我在 v3.6.0 中保存工作区时遇到了这个问题,然后与使用 v3.4.2 的同事共享文件。我可以通过在我的保存功能中添加“version=2”来解决这个问题。
假设您的文件名为“myfile.ext”
如果您尝试加载的文件不是 R 脚本,您将使用
source("myfile.ext")
您可以尝试 readRDS
函数并将其分配给变量名:
my.data <- readRDS("myfile.ext")
幻数来自 UNIX 类型的系统,其中文件的前几个字节包含一个指示文件类型的标记。
此错误表明您正在尝试将无效文件类型加载到 R 中。由于某种原因,R 不再将此文件识别为 R 工作区文件。
安装 readr
软件包,然后使用 library(readr)
。
readr::
可以轻松浏览这些功能。 readr::read_rds
最终对我有用。
当您尝试 load()
rds 对象而不是使用
object <- readRDS("object.rds")
使用 saveRDS()
而不是 save()
保存时出现错误。例如save(iris, file="data/iris.RData")
这为我解决了这个问题。我找到了这个信息here
另请注意,使用 save()
/ load()
加载的对象与最初保存时使用的名称相同(即,您不能重命名它,直到它已经以最初保存时的名称加载到 R 环境中它)。
当我将 Rdata 文件保存在旧版本的 R 中然后我尝试在新版本中打开时,我遇到了这个问题。我通过将我的 R 版本更新到最新来解决。
如果您正在使用 devtools
,请尝试使用以下方式保存文件:
devtools::use_data(x, internal = TRUE)
然后,删除之前保存的所有文件。
来自文档:
internal 如果为 FALSE,则将每个对象保存在数据目录中的单独 .rda 文件中。每当加载包时,这些都是可用的。如果为 TRUE,则将所有对象存储在单个 R/sysdata.rda 文件中。这些对象仅在包中可用。
当我更新我的 R 和 R Studio 版本并加载我在以前版本下创建的文件时,会发生此错误。所以我重新安装了我之前的 R 版本,一切正常。
load()
而不是read.csv()
时,我也是如此。 :pload()
而不是readRDS()
时,我也是如此,第 2 部分(是的,9 个月后,我回到这里几乎是同样的错误)。