Причина появления ошибки «плохое магическое число» при загрузке рабочего пространства и как ее избежать?

96

Я попытался загрузить свое рабочее пространство R и получил эту ошибку:

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 

Меня не особо интересуют технические детали, но в основном то, как я это вызвал и как я могу предотвратить это в будущем. Вот несколько заметок о ситуации:

  1. Я запускаю R 2.15.1 на MacBook Pro под управлением Windows XP в разделе bootcamp.
  2. Что-то явно не так с этим файлом рабочего пространства, так как он весит всего ~ 80 КБ, в то время как все мои другие обычно> 10 000
  3. На выходных я запускал внешнюю программу моделирования в R и сохранял ее результаты для разных объектов. Я запускал несколько итераций модели в течение нескольких дней, например output_Saturday <- call_model ()
  4. В выводе модели нет ничего особенного, это просто список со слотами для бета-версий, VC-матриц, спецификаций модели и т. Д.
Н. Брауэр
источник
9
Угадайте: это не файл рабочей области, это журнал команд R.
Джошуа Ульрих
4
Подозреваю то же самое, попробуйте загрузить source(filename)вместо load(filename).
nograpes
Облом - Придется проверять. Хотел бы я утверждать, что это ошибка новичков.
N Brouwer
1
Подобно тому , что сказал @JoshuaUlrich, я loadэд что - то я write.tableéd , а не под saveред и получил эту ошибку. Ой.
isomorphismes
Получил эту ошибку, когда загружаю базу данных с помощью load, где loadDbследует использовать.
mt1022

Ответы:

113

Я получил эту ошибку, когда случайно использовал load()вместо source()или readRDS().

Крис Ш.
источник
3
Я тоже, когда случайно использовал load()вместо read.csv(). : p
Вальдир Леонсио
35
Я тоже, часть 2, когда я случайно использовал load()вместо readRDS()(да, 9 месяцев спустя, я вернулся сюда почти из-за той же ошибки).
Waldir Leoncio
36

Также стоит отметить следующее из документа группы R Core, в котором резюмируются изменения в версиях R после v3.5.0 ( здесь ):

R имеет новый формат сериализации (версия 3), который поддерживает настраиваемую сериализацию объектов инфраструктуры ALTREP ... Сериализованные данные в формате 3 не могут быть прочитаны версиями R до версии 3.5.0.

Я столкнулся с этой проблемой, когда сохранил рабочую область в v3.6.0, а затем поделился файлом с коллегой, который использовал v3.4.2. Мне удалось решить проблему, добавив «version = 2» к моей функции сохранения.

слышать
источник
2
Это невероятно полезно!
wolfsatthedoor
Это способ.
user2961927
Благодарность! Это помогло в моем случае (я только что установил R из репозитория ubuntu - и попытался открыть файл RData, который я создал несколько недель назад на другом компьютере, используя немного более новую версию R)
lebatsnok
18

Предполагая, что ваш файл называется "myfile.ext"

Если файл, который вы пытаетесь загрузить, не является R-скриптом, вы должны использовать

source("myfile.ext")

вы можете попробовать эту readRDSфункцию и присвоить ее имени переменной:

my.data <- readRDS("myfile.ext")
user2643170
источник
9

Магическое число прибывает из систем типа UNIX, где первые несколько байтов файла содержат маркер, указывающий тип файла.

Эта ошибка означает, что вы пытаетесь загрузить файл недопустимого типа в R. По какой-то причине R больше не распознает этот файл как файл рабочей области R.

Эллис Валентинер
источник
6

Установите readrпакет, затем используйте library(readr).

Аурелия Аурита
источник
1
Хороший трюк ... Мне пришлось попробовать несколько функций пакетов, но с readr::их помощью легко просматривать функции. readr::read_rdsэто то, что в итоге сработало для меня.
Мэтт Баннерт 02
4

Это также происходит, когда вы пытаетесь load()использовать объект rds вместо использования

object <- readRDS("object.rds")
DCZ
источник
2

Я получил ошибку при создании пакета R (используя roxygen2)

Причина в моем случае заключалась в том, что я сэкономил data/mydata.RDataс помощью, saveRDS()а не save(). Напримерsave(iris, file="data/iris.RData")

Это устранило проблему для меня. Я нашел эту информацию здесь

Также обратите внимание, что с save()/ load()объект загружается с тем же именем, с которым он изначально был сохранен (т.е. вы не можете переименовать его, пока он не будет загружен в среду R под тем именем, которое он имел при первоначальном сохранении).

Стивек
источник
1

У меня возникла эта проблема, когда я сохранил файл Rdata в более старой версии R, а затем попытался открыть в новой. Решил, обновив мою версию R до последней.

Хуан Мануэль Ортис де Сарате
источник
0

Если вы работаете, devtoolsпопробуйте сохранить файлы с помощью:

devtools::use_data(x, internal = TRUE)

Затем удалите все файлы, сохраненные ранее.

Из документа:

внутренний Если FALSE, сохраняет каждый объект в отдельных файлах .rda в каталоге данных. Они доступны всякий раз, когда пакет загружен. Если TRUE, все объекты сохраняются в одном файле R / sysdata.rda. Эти объекты доступны только в пакете.

мариопа
источник