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:
J'ai eu cette erreur lorsque j'ai utilisé accidentellement load()
au lieu de source()
ou readRDS()
.
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")
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.
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.
Installez le package readr
, puis utilisez library(readr)
.
Cela se produit également lorsque vous essayez de load()
un objet rds au lieu de
object <- readRDS("object.rds")
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).
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.