La causa dell'errore "bad magic number" durante il caricamento di un'area di lavoro e come evitarlo?


93

Ho provato a caricare il mio spazio di lavoro R e ho ricevuto questo errore:

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 

Non sono particolarmente interessato ai dettagli tecnici, ma soprattutto a come l'ho causato e come posso prevenirlo in futuro. Ecco alcune note sulla situazione:

  1. Uso R 2.15.1 su un MacBook Pro con Windows XP su una partizione di bootcamp.
  2. C'è qualcosa di ovviamente sbagliato in questo file dell'area di lavoro, dal momento che pesa solo ~ 80kb mentre tutti gli altri sono solitamente> 10.000
  3. Durante il fine settimana stavo eseguendo un programma di modellazione esterno in R e memorizzando il suo output su oggetti diversi. Ho eseguito diverse iterazioni del modello nel corso di diversi giorni, ad esempio output_Saturday <- call_model ()
  4. Non c'è niente di speciale nell'output del modello, è solo un elenco con slot per beta, matrici VC, specifica del modello, ecc.

9
Indovina: non è un file dell'area di lavoro, è un registro dei comandi R.
Joshua Ulrich,

4
Sospetto lo stesso, prova a caricarlo con source(filename)invece di load(filename).
nograpes

Bummmer - Dovrà controllare. Vorrei poter affermare che è stato un errore dei principianti.
N Brouwer

1
Simile a quello che ha detto @JoshuaUlrich, ho modificato loadqualcosa che avevo modificato write.tablepiuttosto che saveed e ottenuto questo errore. Ops.
isomorfismi

Ho ricevuto questo errore quando carico un database con load, dove loadDbdovrebbe essere usato.
mt1022

Risposte:


112

Ho ricevuto quell'errore quando ho usato accidentalmente al load()posto di source()o readRDS().


3
Così ho fatto, quando ho usato accidentalmente al load()posto di read.csv(). : p
Waldir Leoncio

35
Così ho fatto io, parte 2, quando ho usato accidentalmente load()invece di readRDS()(sì, 9 mesi dopo, sono tornato qui praticamente per lo stesso errore).
Waldir Leoncio

34

Vale anche la pena notare quanto segue da un documento del R Core Team che riassume le modifiche nelle versioni di R dopo la v3.5.0 ( qui ):

R ha un nuovo formato di serializzazione (versione 3) che supporta la serializzazione personalizzata degli oggetti framework ALTREP ... I dati serializzati nel formato 3 non possono essere letti dalle versioni di R precedenti alla versione 3.5.0.

Ho riscontrato questo problema quando ho salvato un'area di lavoro nella v3.6.0 e quindi ho condiviso il file con un collega che utilizzava la v3.4.2. Sono stato in grado di risolvere il problema aggiungendo "version = 2" alla mia funzione di salvataggio.


2
Questo è incredibilmente utile!
wolfsatthedoor il

Questo è il modo.
user2961927

Grazie! Questo ha aiutato nel mio caso (avevo appena installato R dal repository Ubuntu e ho provato ad aprire un file RData che avevo creato poche settimane fa su un'altra macchina utilizzando una versione leggermente più recente di R)
lebatsnok

18

Supponendo che il tuo file si chiami "miofile.ext"

Se il file che stai tentando di caricare non è uno script R, per il quale useresti

source("myfile.ext")

potresti provare la readRDSfunzione e assegnarla a un nome di variabile:

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

9

Il numero magico proviene da sistemi di tipo UNIX in cui i primi pochi byte di un file contenevano un indicatore che indicava il tipo di file.

Questo errore indica che stai tentando di caricare un tipo di file non valido in R. Per qualche motivo, R non riconosce più questo file come un file dell'area di lavoro R.


6

Installa il readrpacchetto, quindi usa library(readr).


1
Bel trucco ... ho dovuto provare un paio di funzioni dei pacchetti, ma con readr::è facile scorrere le funzioni. readr::read_rdsè quello che ha funzionato per me alla fine.
Matt Bannert

4

Si verifica anche quando provi a load()un oggetto rds invece di usare

object <- readRDS("object.rds")

2

Ho ricevuto l'errore durante la creazione di un pacchetto R (utilizzando roxygen2)

La causa nel mio caso era che avevo salvato data/mydata.RDatacon saveRDS()piuttosto chesave() . Per esempiosave(iris, file="data/iris.RData")

Questo ha risolto il problema per me. Ho trovato questa informazione qui

Nota anche che con save()/ load()l'oggetto viene caricato con lo stesso nome con cui è stato salvato inizialmente (cioè non puoi rinominarlo finché non è già caricato nell'ambiente R con il nome che aveva quando l'hai salvato inizialmente).


1

Ho avuto questo problema quando ho salvato il file Rdata in una versione precedente di R e poi ho provato ad aprirne uno nuovo. Ho risolto aggiornando la mia versione R alla più recente.


0

Se stai lavorando con devtoolsprova a salvare i file con:

devtools::use_data(x, internal = TRUE)

Quindi, elimina tutti i file salvati in precedenza.

Da doc:

internal Se FALSE, salva ogni oggetto in singoli file .rda nella directory dei dati. Questi sono disponibili ogni volta che il pacchetto viene caricato. Se TRUE, memorizza tutti gli oggetti in un singolo file R / sysdata.rda. Questi oggetti sono disponibili solo all'interno del pacchetto.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.