web-dev-qa-db-fra.com

La cause de l'erreur "mauvais nombre magique" lors du chargement d'un espace de travail et comment l'éviter?

J'ai essayé de charger mon espace de travail R et j'ai reçu cette erreur:

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 

Je ne m'intéresse pas particulièrement aux détails techniques, mais surtout à la façon dont je l'ai provoquée et à la manière dont je peux l'éviter à l'avenir. Voici quelques notes sur la situation:

  1. J'exécute R 2.15.1 sur un MacBook Pro exécutant Windows XP sur une partition bootcamp.
  2. Il y a quelque chose qui ne va manifestement pas dans ce fichier d'espace de travail, puisqu'il ne pèse que ~ 80 Ko, alors que tous mes autres sont généralement> 10 000
  3. Au cours du week-end, j'exécutais un programme de modélisation externe dans R et stockais sa sortie dans différents objets. J'ai exécuté plusieurs itérations du modèle sur plusieurs jours, par exemple output_Saturday <- call_model ()
  4. Il n’ya rien de spécial dans la sortie du modèle, c’est juste une liste avec des emplacements pour les betas, les matrices de VC, les spécifications du modèle, etc.
63
N Brouwer

J'ai eu cette erreur lorsque j'ai utilisé accidentellement load() au lieu de source() ou readRDS().

80
Chris SH

En supposant que votre fichier s'appelle "myfile.ext"

Si le fichier que vous essayez de charger n’est pas un script R, pour lequel vous utiliseriez 

source("myfile.ext")

vous pouvez essayer la fonction readRDS et l'assigner à un nom de variable:

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

Le nombre magique provient de systèmes de type UNIX où les premiers octets d'un fichier contenaient un marqueur indiquant le type de fichier.

Cette erreur indique que vous essayez de charger un type de fichier non valide dans R. Pour une raison quelconque, R ne reconnaît plus ce fichier en tant que fichier d'espace de travail R.

6
Ellis Valentiner

Il convient également de noter ce qui suit dans un document de l’équipe centrale R récapitulant les modifications apportées aux versions de R après la v3.5.0 ( here ):

R a un nouveau format de sérialisation (version 3) qui prend en charge la sérialisation personnalisée des objets du cadre ALTREP ... Les données sérialisées au format 3 ne peuvent pas être lues par les versions de R antérieures à version 3.5.0.

J'ai rencontré ce problème lorsque j'ai enregistré un espace de travail dans la v3.6.0, puis partagé le fichier avec un collègue utilisant la v3.4.2. J'ai pu résoudre le problème en ajoutant "version = 2" à ma fonction de sauvegarde.

4
jhearn

Installez le package readr, puis utilisez library(readr).

4
Aurelia Aurita

Cela se produit également lorsque vous essayez de load() un objet rds au lieu de 

object <- readRDS("object.rds")
1
DCZ

J'ai eu l'erreur lors de la construction d'un paquet R (en utilisant roxygen2)

La cause dans mon cas était que j'avais enregistré data/mydata.RData avec saveRDS() plutôt que save(). Par exemple. save(iris, file="data/iris.RData")

Cela a résolu le problème pour moi. J'ai trouvé cette information ici

Notez également qu'avec save()/load() l'objet est chargé avec le même nom que celui avec lequel il a été enregistré (c'est-à-dire que vous ne pouvez pas le renommer tant qu'il n'est pas déjà chargé dans l'environnement R sous le nom qu'il avait lors de son enregistrement initial).

0
user5783745

J'ai eu ce problème lorsque j'ai enregistré le fichier Rdata dans une ancienne version de R, puis j'ai essayé de l'ouvrir dans une nouvelle. J'ai résolu en mettant à jour ma version R à la plus récente.

Si vous travaillez avec devtools, essayez d’enregistrer les fichiers avec:

devtools::use_data(x, internal = TRUE)

Ensuite, supprimez tous les fichiers enregistrés précédemment.

De doc:

internal Si FALSE, enregistre chaque objet dans des fichiers .rda individuels du répertoire de données. Celles-ci sont disponibles chaque fois que le paquet est chargé. Si TRUE, stocke tous les objets dans un seul fichier R/sysdata.rda. Ces objets sont uniquement disponibles dans le package.

0
mariope