¿La causa del error de "número mágico incorrecto" al cargar un espacio de trabajo y cómo evitarlo?


93

Intenté cargar mi espacio de trabajo R y recibí este 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 

No estoy particularmente interesado en los detalles técnicos, pero sobre todo en cómo lo causé y cómo puedo prevenirlo en el futuro. Aquí hay algunas notas sobre la situación:

  1. Estoy ejecutando R 2.15.1 en una MacBook Pro con Windows XP en una partición de bootcamp.
  2. Obviamente, hay algo mal en este archivo de espacio de trabajo, ya que pesa solo ~ 80 kb, mientras que todos los demás suelen ser> 10,000
  3. Durante el fin de semana estuve ejecutando un programa de modelado externo en R y almacenando su salida en diferentes objetos. Ejecuté varias iteraciones del modelo en el transcurso de varios días, por ejemplo, output_Saturday <- call_model ()
  4. No hay nada especial en la salida del modelo, es solo una lista con ranuras para betas, matrices VC, especificación del modelo, etc.

9
Adivina: no es un archivo de espacio de trabajo, es un registro de los comandos R.
Joshua Ulrich

4
Sospecho lo mismo, intente cargarlo con en source(filename)lugar de load(filename).
nograpes

Bummmer - Tendré que comprobarlo. Ojalá pudiera afirmar que fue un error de principiantes.
N Brouwer

1
Similar a lo que dijo @JoshuaUlrich, edité loadalgo que había write.tableeditado en lugar de saveed y obtuve este error. ¡Ups!
isomorfismos

Recibí este error cuando cargo una base de datos con load, dónde loadDbdebería usarse.
mt1022

Respuestas:


112

Recibí ese error cuando usé accidentalmente en load()lugar de source()o readRDS().


3
Yo también, cuando accidentalmente usé en load()lugar de read.csv(). : p
Waldir Leoncio

35
Yo también, parte 2, cuando usé accidentalmente en load()lugar de readRDS()(sí, 9 meses después, estoy de vuelta aquí por casi el mismo error).
Waldir Leoncio

34

También vale la pena señalar lo siguiente de un documento del R Core Team que resume los cambios en las versiones de R posteriores a la v3.5.0 ( aquí ):

R tiene un nuevo formato de serialización (versión 3) que admite la serialización personalizada de objetos de marco ALTREP ... Los datos serializados en formato 3 no pueden ser leídos por versiones de R anteriores a la versión 3.5.0.

Encontré este problema cuando guardé un espacio de trabajo en v3.6.0 y luego compartí el archivo con un colega que estaba usando v3.4.2. Pude resolver el problema agregando "version = 2" a mi función de guardado.


2
¡Esto es increíblemente útil!
wolfsatthedoor

Esta es la forma.
user2961927

¡Gracias! Esto ayudó en mi caso (acababa de instalar R desde el repositorio de ubuntu, e intenté abrir un archivo RData que había creado hace unas semanas en otra máquina usando una versión un poco más nueva de R)
lebatsnok

18

Suponiendo que su archivo se llame "myfile.ext"

Si el archivo que está intentando cargar no es un script R, para lo cual usaría

source("myfile.ext")

puede probar la readRDSfunción y asignarla a un nombre de variable:

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

9

El número mágico proviene de sistemas de tipo UNIX donde los primeros bytes de un archivo tenían un marcador que indicaba el tipo de archivo.

Este error indica que está intentando cargar un tipo de archivo no válido en R. Por alguna razón, R ya no reconoce este archivo como un archivo de espacio de trabajo de R.


6

Instale el readrpaquete, luego use library(readr).


1
Buen truco ... Tuve que probar un par de funciones de paquetes, pero readr::es fácil escanear las funciones. readr::read_rdses lo que funcionó para mí al final.
Matt Bannert

4

También ocurre cuando intenta load()un objeto rds en lugar de usar

object <- readRDS("object.rds")

2

Recibí el error al construir un paquete R (usando roxygen2)

La causa en mi caso fue que había ahorrado data/mydata.RDatacon en saveRDS()lugar de save(). P.ejsave(iris, file="data/iris.RData")

Esto solucionó el problema para mí. Encontré esta información aquí

También tenga en cuenta que con save()/ load()el objeto se carga con el mismo nombre con el que se guardó inicialmente (es decir, no puede cambiarle el nombre hasta que ya esté cargado en el entorno R con el nombre que tenía cuando lo guardó inicialmente).


1

Tuve este problema cuando guardé el archivo Rdata en una versión anterior de R y luego intenté abrir en una nueva. Lo resolví actualizando mi versión R a la más nueva.


0

Si está trabajando con, devtoolsintente guardar los archivos con:

devtools::use_data(x, internal = TRUE)

Luego, elimine todos los archivos guardados anteriormente.

Desde doc:

internal Si es FALSE, guarda cada objeto en archivos .rda individuales en el directorio de datos. Están disponibles siempre que se carga el paquete. Si es TRUE, almacena todos los objetos en un solo archivo R / sysdata.rda. Estos objetos solo están disponibles dentro del paquete.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.