สาเหตุของข้อผิดพลาด "หมายเลขวิเศษไม่ถูกต้อง" เมื่อโหลดพื้นที่ทำงานและจะหลีกเลี่ยงได้อย่างไร


97

ฉันพยายามโหลดพื้นที่ทำงาน 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. มีบางอย่างผิดปกติอย่างเห็นได้ชัดว่าไฟล์พื้นที่ทำงานนี้มีน้ำหนักเพียง ~ 80kb ในขณะที่ไฟล์อื่น ๆ ทั้งหมดของฉันมักจะ> 10,000
  3. ในช่วงสุดสัปดาห์ฉันใช้โปรแกรมสร้างแบบจำลองภายนอกใน R และจัดเก็บเอาต์พุตไปยังวัตถุต่างๆ ฉันใช้การทำซ้ำหลายครั้งของโมเดลในช่วงหลายวันเช่น output_Saturday <- call_model ()
  4. ไม่มีอะไรพิเศษสำหรับเอาต์พุตของโมเดลเป็นเพียงรายการที่มีสล็อตสำหรับ betas, VC-matrices, ข้อมูลจำเพาะของโมเดล ฯลฯ

9
เดา: ไม่ใช่ไฟล์พื้นที่ทำงาน แต่เป็นบันทึกของคำสั่ง R
Joshua Ulrich

4
ฉันสงสัยเหมือนกันลองโหลดด้วยแทนsource(filename) load(filename)
nograpes

Bummmer - จะต้องตรวจสอบ ฉันหวังว่าฉันจะอ้างได้ว่าเป็นความผิดพลาดของผู้เริ่มต้น
N Brouwer

1
คล้ายกับสิ่งที่ @JoshuaUlrich กล่าวฉันloadแก้ไขบางสิ่งที่ฉันมีwrite.tableed แทนที่จะsaveed และได้รับข้อผิดพลาดนี้ อ๊ะ.
isomorphismes

ได้รับข้อผิดพลาดนี้เมื่อฉันโหลดฐานข้อมูลด้วยloadตำแหน่งที่loadDbควรใช้
mt1022

คำตอบ:


114

ฉันได้รับข้อผิดพลาดนั้นเมื่อฉันใช้load()แทนsource()หรือreadRDS()โดยไม่ได้ตั้งใจ


3
ดังนั้นเมื่อฉันบังเอิญใช้load()แทนread.csv(). : p
Waldir Leoncio

36
ฉันก็ตอนที่ 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 จากที่เก็บอูบุนตู - และพยายามเปิดไฟล์ RData ที่ฉันสร้างขึ้นเมื่อสองสามสัปดาห์ก่อนบนเครื่องอื่นโดยใช้ R เวอร์ชันใหม่กว่าเล็กน้อย)
lebatsnok

18

สมมติว่าไฟล์ของคุณชื่อ "myfile.ext"

หากไฟล์ที่คุณพยายามโหลดไม่ใช่ R-script ซึ่งคุณจะใช้

source("myfile.ext")

คุณอาจลองใช้readRDSฟังก์ชันและกำหนดให้เป็นชื่อตัวแปร:

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

9

เลขวิเศษมาจากระบบประเภท UNIX ที่ไฟล์สองสามไบต์แรกมีเครื่องหมายระบุประเภทไฟล์

ข้อผิดพลาดนี้บ่งชี้ว่าคุณกำลังพยายามโหลดประเภทไฟล์ที่ไม่ถูกต้องลงใน R ด้วยเหตุผลบางประการ R ไม่รู้จักไฟล์นี้เป็นไฟล์เวิร์กสเปซ R อีกต่อไป


6

ติดตั้งแพคเกจการใช้งานแล้วreadrlibrary(readr)


1
เคล็ดลับที่ดี ... ฉันต้องลองใช้ฟังก์ชั่นแพ็คสองสามฟังก์ชั่น แต่readr::ง่ายต่อการสแกนผ่านฟังก์ชั่น readr::read_rdsคือสิ่งที่ใช้ได้ผลสำหรับฉันในที่สุด
Matt Bannert

4

นอกจากนี้ยังเกิดขึ้นเมื่อคุณพยายามที่จะload()ใช้วัตถุ rds แทนการใช้

object <- readRDS("object.rds")

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)

จากนั้นลบไฟล์ทั้งหมดที่บันทึกไว้ก่อนหน้านี้

จาก doc:

ภายในถ้าเป็นเท็จบันทึกแต่ละออบเจ็กต์ในไฟล์. rda แต่ละไฟล์ในไดเร็กทอรีข้อมูล สิ่งเหล่านี้พร้อมใช้งานทุกครั้งที่โหลดแพ็กเกจ ถ้าเป็น TRUE เก็บอ็อบเจ็กต์ทั้งหมดไว้ในไฟล์ R / sysdata.rda ไฟล์เดียว วัตถุเหล่านี้มีอยู่ในแพ็คเกจเท่านั้น

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.