Bir çalışma alanı yüklenirken ortaya çıkan "kötü sihirli sayı" hatasının nedeni ve bundan nasıl kaçınılır?


97

R çalışma alanımı yüklemeye çalıştım ve şu hatayı aldım:

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 

Özellikle teknik detaylarla ilgilenmiyorum, ama daha çok buna nasıl sebep olduğum ve gelecekte bunu nasıl önleyebileceğimle ilgileniyorum. Durumla ilgili bazı notlar:

  1. Bir bootcamp bölümünde Windows XP çalıştıran bir MacBook Pro'da R 2.15.1 çalıştırıyorum.
  2. Bu çalışma alanı dosyasında bariz bir şekilde yanlış olan bir şey var, çünkü sadece ~ 80kb ağırlığındayken diğerlerinin tümü genellikle> 10.000
  3. Hafta sonu R'de harici bir modelleme programı çalıştırıyor ve çıktısını farklı nesnelere depoluyordum. Birkaç gün boyunca modelin birkaç yinelemesini çalıştırdım, örneğin output_Saturday <- call_model ()
  4. Model çıktısına özel bir şey yoktur, sadece betalar için slotlar, VC-matrisleri, model spesifikasyonu vb.

9
Tahmin edin: bu bir çalışma alanı dosyası değil, R komutlarının bir günlüğü.
Joshua Ulrich

4
Aynı source(filename)şeyden şüpheleniyorum, yerine yüklemeyi deneyin load(filename).
nograpes

Bummmer - Kontrol etmek zorunda kalacak. Keşke yeni başlayanlar için bir hata olduğunu iddia edebilseydim.
N Brouwer

1
@JoshuaUlrich söylediklerini benzer şekilde, ben loadben bir şeyi ed write.tableziyade ed saveed ve bu hata var. Oops.
isomorphismes

Ben bir veritabanı yüklediğinizde bu hatayı aldım load, loadDbkullanılmalıdır.
mt1022

Yanıtlar:


114

Yanlışlıkla veya load()yerine kullandığımda bu hatayı aldım .source()readRDS()


3
Ben de yanlışlıkla load()yerine kullandığımda yaptım read.csv(). : p
Waldir Leoncio

36
Ben de öyle yaptım, bölüm 2, yanlışlıkla load()yerine kullandığımda readRDS()(evet, 9 ay sonra, hemen hemen aynı hata için buradayım).
Waldir Leoncio

37

Ayrıca R Çekirdek Ekibi tarafından v3.5.0'dan sonraki R sürümlerindeki değişiklikleri özetleyen bir belgeden aşağıdakilere dikkat çekmek gerekir ( burada ):

R, ALTREP çerçeve nesnelerinin özel serileştirmesini destekleyen yeni serileştirme biçimine (sürüm 3) sahiptir ... Biçim 3'teki serileştirilmiş veriler, sürüm 3.5.0'dan önceki R sürümleri tarafından okunamaz.

V3.6.0'da bir çalışma alanını kaydettiğimde ve ardından dosyayı v3.4.2 kullanan bir meslektaşımla paylaştığımda bu sorunla karşılaştım. Kaydetme işlevime "version = 2" ekleyerek sorunu çözebildim.


2
Bu inanılmaz derecede faydalıdır!
wolfsatthedoor

Yol budur.
user2961927

Teşekkürler! Bu benim durumuma yardımcı oldu (R'yi ubuntu deposundan yeni yükledim - ve birkaç hafta önce R'nin biraz daha yeni bir sürümünü kullanarak başka bir makinede oluşturduğum bir RData dosyasını açmaya çalıştım)
lebatsnok

18

Dosyanızın "dosyam.ext" olarak adlandırıldığını varsayarsak

Yüklemeye çalıştığınız dosya, kullanacağınız bir R-betiği değilse

source("myfile.ext")

readRDSişlevi deneyebilir ve bir değişken adına atayabilirsiniz:

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

9

Sihirli sayı, bir dosyanın ilk birkaç baytının dosya türünü gösteren bir işaretçi tuttuğu UNIX türü sistemlerden gelir.

Bu hata, geçerli olmayan bir dosya türünü R'ye yüklemeye çalıştığınızı gösterir. Bazı nedenlerden dolayı, R artık bu dosyayı bir R çalışma alanı dosyası olarak tanımıyor.


6

readrPaketi kurun , ardından kullanın library(readr).


1
Güzel numara ... Birkaç paket işlevini denemem gerekiyordu, ancak işlevleri readr::taramak kolay. readr::read_rdssonunda benim için işe yarayan şeydi.
Matt Bannert

4

Kullanmak load()yerine bir rds nesnesini denediğinizde de oluşur .

object <- readRDS("object.rds")

2

Bir R paketi oluştururken hata aldım (roxygen2 kullanarak)

Benim durumumda çünkü ben kurtarmıştı olmasıydı data/mydata.RDataile saveRDS()yerine save(). Örneğinsave(iris, file="data/iris.RData")

Bu benim için sorunu çözdü. Bu bilgiyi burada buldum

Ayrıca save()/ load()ile nesnenin başlangıçta kaydedildiği aynı adla yüklendiğine dikkat edin (yani, onu ilk kaydettiğinizde sahip olduğu adla R ortamına zaten yüklenene kadar yeniden adlandıramazsınız).


1

Rdata dosyasını R'nin daha eski bir sürümüne kaydettiğimde bu sorunu yaşadım ve sonra yenisiyle açmaya çalıştım. R versiyonumu en yenisine güncelleyerek çözdüm.


0

Eğer çalışıyorsanız devtools, dosyaları şununla kaydetmeyi deneyin:

devtools::use_data(x, internal = TRUE)

Ardından, önceden kaydedilmiş tüm dosyaları silin.

Dokümandan:

dahili YANLIŞ ise, her nesneyi veri dizinindeki ayrı .rda dosyalarına kaydeder. Bunlar, paket yüklendiğinde kullanılabilir. DOĞRU ise, tüm nesneleri tek bir R / sysdata.rda dosyasında depolar. Bu nesneler yalnızca paket içinde mevcuttur.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.