The cause of “bad magic number” error when loading

2019-01-11 12:21发布

问题:

I tried to load my R workspace and received this error:

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 

I'm not particularly interested in the technical details, but mostly in how I caused it and how I can prevent it in the future. Here's some notes on the situation:

  1. I'm running R 2.15.1 on a MacBook Pro running Windows XP on a bootcamp partition.
  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. Over the weekend I was running an external modeling program in R and storing its output to different objects. I ran several iterations of the model over the course of several days, eg output_Saturday <- call_model()
  4. There is nothing special to the model output, its just a list with slots for betas, VC-matrices, model specification, etc.

回答1:

I got that error when I accidentally used load() instead of source() or readRDS().



回答2:

Assuming your file is named "myfile.ext"

If the file you're trying to load is not an R-script, for which you would use

source("myfile.ext")

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

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


回答3:

The magic number comes from UNIX-type systems where the first few bytes of a file held a marker indicating the file type.

This error indicates you are trying to load a non-valid file type into R. For some reason, R no longer recognizes this file as an R workspace file.



回答4:

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



回答5:

It also occurs when you try to load() an rds object instead of using

object <- readRDS("object.rds")


回答6:

If you are working with devtools try to save the files with:

devtools::use_data(x, internal = TRUE)

Then, delete all files saved previously.

From doc:

internal If FALSE, saves each object in individual .rda files in the data directory. These are available whenever the package is loaded. If TRUE, stores all objects in a single R/sysdata.rda file. These objects are only available within the package.