Die Ursache für den Fehler "Bad Magic Number" beim Laden eines Arbeitsbereichs und wie kann dieser vermieden werden?

92

Ich habe versucht, meinen R-Arbeitsbereich zu laden und habe folgende Fehlermeldung erhalten:

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 

Ich interessiere mich nicht besonders für die technischen Details, sondern hauptsächlich dafür, wie ich sie verursacht habe und wie ich sie in Zukunft verhindern kann. Hier einige Hinweise zur Situation:

  1. Ich verwende R 2.15.1 auf einem MacBook Pro mit Windows XP auf einer Bootcamp-Partition.
  2. Diese Arbeitsbereichsdatei stimmt offensichtlich nicht, da sie nur ~ 80 KB wiegt, während alle meine anderen normalerweise> 10.000 sind
  3. Über das Wochenende habe ich ein externes Modellierungsprogramm in R ausgeführt und dessen Ausgabe in verschiedenen Objekten gespeichert. Ich habe mehrere Iterationen des Modells über mehrere Tage ausgeführt, z. B. output_Saturday <- call_model ()
  4. Die Modellausgabe enthält nichts Besonderes, sondern nur eine Liste mit Steckplätzen für Betas, VC-Matrizen, Modellspezifikationen usw.
N Brouwer
quelle
9
Vermutung: Es ist keine Arbeitsbereichsdatei, sondern ein Protokoll der R-Befehle.
Joshua Ulrich
4
Ich vermute das gleiche, versuche es source(filename)stattdessen mit zu laden load(filename).
Nograpes
Bummmer - Muss nachsehen. Ich wünschte, ich könnte behaupten, es sei ein Anfängerfehler.
N Brouwer
1
Ähnlich wie bei @JoshuaUlrich habe ich loadetwas bearbeitet, das ich write.tableeher bearbeitet als bearbeitet habe, saveund diesen Fehler erhalten. Hoppla.
Isomorphismen
Ich habe diesen Fehler erhalten, wenn ich eine Datenbank mit lade load, wo verwendet loadDbwerden soll.
mt1022

Antworten:

109

Ich habe diesen Fehler erhalten, als ich versehentlich load()anstelle von source()oder verwendet habe readRDS().

Chris SH
quelle
3
Ich auch, als ich versehentlich load()statt verwendet habe read.csv(). : p
Waldir Leoncio
35
Also tat ich, Teil 2, wenn ich versehentlich verwendet load()statt readRDS()(ja, 9 Monate später, ich bin hier wieder für so ziemlich die gleichen Fehler).
Waldir Leoncio
31

Erwähnenswert ist auch Folgendes aus einem Dokument des R-Kernteams, in dem Änderungen in Versionen von R nach Version 3.5.0 ( hier ) zusammengefasst sind:

R verfügt über ein neues Serialisierungsformat (Version 3), das die benutzerdefinierte Serialisierung von ALTREP-Framework-Objekten unterstützt. Serialisierte Daten im Format 3 können von Versionen von R vor Version 3.5.0 nicht gelesen werden.

Dieses Problem trat auf, als ich einen Arbeitsbereich in Version 3.6.0 speicherte und die Datei dann für einen Kollegen freigab, der Version 3.4.2 verwendete. Ich konnte das Problem beheben, indem ich meiner Speicherfunktion "version = 2" hinzufügte.

jhearn
quelle
2
Das ist unglaublich hilfreich!
Wolfsatthedoor
Das ist der Weg.
user2961927
Vielen Dank! Dies half in meinem Fall (hatte gerade R aus dem Ubuntu-Repository installiert - und versuchte, eine RData-Datei zu öffnen, die ich vor einigen Wochen auf einem anderen Computer mit einer etwas neueren Version von R erstellt hatte)
lebatsnok
18

Angenommen, Ihre Datei heißt "myfile.ext"

Wenn die Datei, die Sie laden möchten, kein R-Skript ist, für das Sie verwenden würden

source("myfile.ext")

Sie können die readRDSFunktion ausprobieren und einem Variablennamen zuweisen:

my.data <- readRDS("myfile.ext")
user2643170
quelle
9

Die magische Zahl stammt von Systemen vom Typ UNIX, bei denen die ersten Bytes einer Datei eine Markierung enthielten, die den Dateityp angibt.

Dieser Fehler zeigt an, dass Sie versuchen, einen ungültigen Dateityp in R zu laden. Aus irgendeinem Grund erkennt R diese Datei nicht mehr als R-Arbeitsbereichsdatei.

Ellis Valentiner
quelle
6

Installieren Sie das readrPaket und verwenden Sie es library(readr).

Aurelia Aurita
quelle
1
Netter Trick ... Ich musste ein paar der Packs-Funktionen ausprobieren, aber damit ist readr::es einfach, die Funktionen zu durchsuchen. readr::read_rdshat am Ende für mich funktioniert.
Matt Bannert
3

Es tritt auch auf, wenn Sie versuchen, load()ein rds-Objekt zu verwenden, anstatt es zu verwenden

object <- readRDS("object.rds")
DCZ
quelle
2

Ich habe den Fehler beim Erstellen eines R-Pakets (mit roxygen2) erhalten.

Die Ursache in meinem Fall war , dass ich gerettet hatte data/mydata.RDatamit saveRDS()statt save(). Z.Bsave(iris, file="data/iris.RData")

Dies hat das Problem für mich behoben. Ich habe diese Info hier gefunden

Beachten Sie auch, dass mit save()/ load()das Objekt mit demselben Namen geladen wird, mit dem es ursprünglich gespeichert wurde (dh Sie können es nicht umbenennen, bis es bereits unter dem Namen, den es beim ersten Speichern hatte, in die R-Umgebung geladen wurde).

stevec
quelle
1

Ich hatte dieses Problem, als ich die Rdata-Datei in einer älteren Version von R speicherte und dann versuchte, sie in einer neuen zu öffnen. Ich habe das Problem gelöst, indem ich meine R-Version auf die neueste Version aktualisiert habe.

Juan Manuel Ortiz de Zarate
quelle
0

Wenn Sie mit arbeiten, devtoolsversuchen Sie, die Dateien zu speichern mit:

devtools::use_data(x, internal = TRUE)

Löschen Sie dann alle zuvor gespeicherten Dateien.

Aus doc:

intern Wenn FALSE, wird jedes Objekt in einzelnen .rda-Dateien im Datenverzeichnis gespeichert. Diese sind verfügbar, wenn das Paket geladen wird. Wenn TRUE, werden alle Objekte in einer einzelnen R / sysdata.rda-Datei gespeichert. Diese Objekte sind nur innerhalb des Pakets verfügbar.

Mariope
quelle