Przyczyna błędu „złej liczby magicznej” podczas ładowania obszaru roboczego i jak go uniknąć?


97

Próbowałem załadować mój obszar roboczy R i otrzymałem ten błąd:

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 

Nie interesują mnie szczegóły techniczne, ale przede wszystkim to, jak to spowodowałem i jak mogę temu zapobiec w przyszłości. Oto kilka uwag dotyczących sytuacji:

  1. Używam wersji R 2.15.1 na MacBooku Pro z systemem Windows XP na partycji bootcamp.
  2. Jest coś oczywiście nie tak w tym pliku obszaru roboczego, ponieważ waży tylko ~ 80kb, podczas gdy wszystkie moje inne mają zwykle> 10 000
  3. Przez weekend uruchamiałem zewnętrzny program do modelowania w R i zapisywałem jego wyniki w różnych obiektach. Wykonałem kilka iteracji modelu w ciągu kilku dni, np. Output_Saturday <- call_model ()
  4. Nie ma nic specjalnego w wyjściu modelu, to tylko lista z gniazdami na wersje beta, matryce VC, specyfikację modelu itp.

9
Zgadnij: to nie jest plik obszaru roboczego, to dziennik poleceń R.
— Joshua Ulrich

4
Podejrzewam to samo, spróbuj go załadować source(filename)zamiast load(filename).
— nografes

Bummmer - Będzie musiał sprawdzić. Chciałbym móc twierdzić, że to błąd początkujących.
— N Brouwer

1
Podobny do tego, co @JoshuaUlrich mówiłem, loaded coś miałem write.tableed zamiast saveed i dostał ten błąd. Ups.
— isomorphismes

Otrzymałem ten błąd, gdy ładuję bazę danych z load, gdzie loadDbpowinno być używane.
— mt1022

Odpowiedzi:


114

Otrzymałem ten błąd, gdy przypadkowo użyłem load()zamiast source()lub readRDS().


3
Tak też zrobiłem, kiedy przypadkowo użyłem load()zamiast read.csv(). : p
— Waldir Leoncio,

36
Podobnie jak ja, część 2, kiedy przypadkowo użyłem load()zamiast readRDS()(tak, 9 miesięcy później, wróciłem tutaj z powodu prawie tego samego błędu).
— Waldir Leoncio

36

Warto również zwrócić uwagę na następujący fragment z dokumentu zespołu R Core Team podsumowującego zmiany w wersjach R po wersji 3.5.0 ( tutaj ):

R ma nowy format serializacji (wersja 3), który obsługuje niestandardową serializację obiektów struktury ALTREP ... Zserializowane dane w formacie 3 nie mogą być odczytywane przez wersje R przed wersją 3.5.0.

Napotkałem ten problem, gdy zapisałem obszar roboczy w wersji 3.6.0, a następnie udostępniłem plik koledze, który korzystał z wersji 3.4.2. Udało mi się rozwiązać ten problem, dodając „version = 2” do mojej funkcji zapisu.


2
To jest niezwykle pomocne!
— wolfsatthedoor

To jest sposób.
— user2961927

Dzięki! Pomogło to w moim przypadku (właśnie zainstalowałem R z repozytorium ubuntu - i próbowałem otworzyć plik RData, który utworzyłem kilka tygodni temu na innym komputerze przy użyciu nieco nowszej wersji R)
— lebatsnok

18

Zakładając, że twój plik nosi nazwę „myfile.ext”

Jeśli plik, który próbujesz załadować, nie jest skryptem R, którego użyjesz

source("myfile.ext")

możesz wypróbować readRDSfunkcję i przypisać ją do nazwy zmiennej:

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

9

Magiczna liczba pochodzi z systemów typu UNIX, w których na pierwszych kilku bajtach pliku znajdował się znacznik wskazujący typ pliku.

Ten błąd wskazuje, że próbujesz załadować niepoprawny typ pliku do R. Z jakiegoś powodu R nie rozpoznaje już tego pliku jako pliku obszaru roboczego R.


6

Zainstaluj readrpakiet, a następnie użyj library(readr).


1
Niezła sztuczka ... Musiałem wypróbować kilka funkcji paczek, ale dzięki readr::temu łatwo je przeglądać. readr::read_rdsjest tym, co w końcu zadziałało.
— Matt Bannert

4

Występuje również, gdy próbujesz load()użyć obiektu rds zamiast używać

object <- readRDS("object.rds")

2

Wystąpił błąd podczas tworzenia pakietu R (przy użyciu roxygen2)

Przyczyną w moim przypadku było to, że uratował data/mydata.RDatasię saveRDS()zamiast save(). Na przykładsave(iris, file="data/iris.RData")

To rozwiązało problem. Znalazłem te informacje tutaj

Zauważ również, że z save()/ load()obiekt jest ładowany pod tą samą nazwą, pod którą jest początkowo zapisywany (tj. Nie możesz zmienić jego nazwy, dopóki nie zostanie załadowany do środowiska R pod nazwą, którą miał, kiedy go zapisałeś).


1

Miałem ten problem, kiedy zapisałem plik Rdata w starszej wersji R, a następnie próbowałem otworzyć w nowej. Rozwiązałem, aktualizując moją wersję R do najnowszej.


0

Jeśli pracujesz z, devtoolsspróbuj zapisać pliki za pomocą:

devtools::use_data(x, internal = TRUE)

Następnie usuń wszystkie zapisane wcześniej pliki.

Z dokumentu:

wewnętrzna Jeśli FALSE, zapisuje każdy obiekt w osobnych plikach .rda w katalogu danych. Są one dostępne za każdym razem, gdy pakiet jest ładowany. Jeśli PRAWDA, wszystkie obiekty są przechowywane w jednym pliku R / sysdata.rda. Te obiekty są dostępne tylko w pakiecie.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.