Penyebab error "angka ajaib buruk" saat memuat ruang kerja dan bagaimana cara menghindarinya?

96

Saya mencoba memuat ruang kerja R saya dan menerima kesalahan ini:

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 

Saya tidak terlalu tertarik dengan detail teknisnya, tetapi kebanyakan tentang bagaimana saya menyebabkannya dan bagaimana saya dapat mencegahnya di masa mendatang. Berikut beberapa catatan tentang situasinya:

  1. Saya menjalankan R 2.15.1 di MacBook Pro yang menjalankan Windows XP di partisi bootcamp.
  2. Jelas ada yang salah dengan file ruang kerja ini, karena beratnya hanya ~ 80kb sementara yang lainnya biasanya> 10.000
  3. Selama akhir pekan saya menjalankan program pemodelan eksternal di R dan menyimpan hasilnya ke objek yang berbeda. Saya menjalankan beberapa iterasi model selama beberapa hari, misalnya output_Saturday <- call_model ()
  4. Tidak ada yang istimewa untuk keluaran model, ini hanya daftar dengan slot untuk beta, matriks VC, spesifikasi model, dll.
N Brouwer
sumber
9
Tebak: ini bukan file ruang kerja, ini adalah log dari perintah R.
Joshua Ulrich
4
Saya curiga sama, coba muat dengan source(filename)alih - alih load(filename).
nograpes
Sial - Harus memeriksa. Saya berharap saya bisa mengklaim itu adalah kesalahan pemula.
N Brouwer
1
Mirip dengan apa yang dikatakan @JoshuaUlrich, aku loaded sesuatu yang saya telah write.tableed daripada saveed dan mendapat kesalahan ini. Ups.
isomorfisma
Mendapat kesalahan ini ketika saya memuat database dengan load, di mana loadDbharus digunakan.
mt1022

Jawaban:

113

Saya mendapat kesalahan itu ketika saya tidak sengaja menggunakan load()alih-alih source()atau readRDS().

Chris SH
sumber
3
Begitu pula saya, ketika saya tidak sengaja menggunakannya, load()bukan read.csv(). : p
Waldir Leoncio
35
Begitu juga saya, bagian 2, ketika saya sengaja digunakan load()sebagai pengganti readRDS()(ya, 9 bulan kemudian, aku kembali ke sini untuk cukup banyak kesalahan yang sama).
Waldir Leoncio
36

Juga perlu diperhatikan hal berikut dari dokumen oleh R Core Team yang merangkum perubahan dalam versi R setelah v3.5.0 (di sini ):

R memiliki format serialisasi baru (versi 3) yang mendukung serialisasi kustom objek kerangka kerja ALTREP ... Data berseri dalam format 3 tidak dapat dibaca oleh versi R sebelum versi 3.5.0.

Saya mengalami masalah ini ketika saya menyimpan ruang kerja di v3.6.0, dan kemudian berbagi file dengan rekan kerja yang menggunakan v3.4.2. Saya dapat mengatasi masalah ini dengan menambahkan "versi = 2" ke fungsi penyimpanan saya.

jhearn
sumber
2
Ini sangat membantu!
wolfsatthedoor
Ini caranya.
pengguna2961927
Terima kasih! Ini membantu dalam kasus saya (baru saja menginstal R dari repositori ubuntu - dan mencoba membuka file RData yang saya buat beberapa minggu yang lalu di komputer lain menggunakan versi R yang sedikit lebih baru)
lebatsnok
18

Dengan asumsi file Anda bernama "myfile.ext"

Jika file yang Anda coba muat bukanlah R-script, yang akan Anda gunakan

source("myfile.ext")

Anda dapat mencoba readRDSfungsi dan menetapkannya ke nama-variabel:

my.data <- readRDS("myfile.ext")
pengguna2643170
sumber
9

Angka ajaib berasal dari sistem tipe UNIX di mana beberapa byte pertama dari file memegang penanda yang menunjukkan tipe file.

Kesalahan ini menunjukkan Anda mencoba memuat jenis file yang tidak valid ke R. Untuk beberapa alasan, R tidak lagi mengenali file ini sebagai file ruang kerja R.

Ellis Valentiner
sumber
6

Instal readrpaketnya, lalu gunakan library(readr).

Aurelia Aurita
sumber
1
Trik yang bagus ... Saya harus mencoba beberapa fungsi paket tetapi dengan readr::mudah untuk memindai melalui fungsi. readr::read_rdsitulah yang berhasil bagi saya pada akhirnya.
Matt Bannert
4

Ini juga terjadi saat Anda mencoba load()objek rds daripada menggunakan

object <- readRDS("object.rds")
DCZ
sumber
2

Saya mendapat kesalahan saat membangun paket R (menggunakan roxygen2)

Penyebab dalam kasus saya adalah bahwa saya telah menabung data/mydata.RDatadengan saveRDS()daripada save(). Misalnyasave(iris, file="data/iris.RData")

Ini memperbaiki masalah saya. Saya menemukan info ini di sini

Juga perhatikan bahwa dengan save()/ load()objek dimuat dengan nama yang sama dengan yang awalnya disimpan (yaitu Anda tidak dapat mengganti namanya sampai itu sudah dimuat ke dalam lingkungan R dengan nama yang dimilikinya saat Anda pertama kali menyimpannya).

stevec
sumber
1

Saya mengalami masalah ini ketika saya menyimpan file Rdata di versi R yang lebih lama dan kemudian saya mencoba membuka yang baru. Saya menyelesaikannya dengan memperbarui versi R saya ke yang terbaru.

Juan Manuel Ortiz de Zarate
sumber
0

Jika Anda bekerja dengan devtoolsmencoba menyimpan file dengan:

devtools::use_data(x, internal = TRUE)

Kemudian, hapus semua file yang disimpan sebelumnya.

Dari dokumen:

internal Jika FALSE, simpan setiap objek dalam file .rda individual di direktori data. Ini tersedia setiap kali paket dimuat. Jika TRUE, simpan semua objek dalam satu file R / sysdata.rda. Objek ini hanya tersedia di dalam paket.

mariope
sumber