Nguyên nhân của lỗi "bad magic number" khi tải vùng làm việc và cách tránh nó?


93

Tôi đã cố gắng tải không gian làm việc R của mình và nhận được lỗi này:

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 

Tôi không đặc biệt quan tâm đến các chi tiết kỹ thuật, mà chủ yếu là cách tôi gây ra nó và cách tôi có thể ngăn chặn nó trong tương lai. Dưới đây là một số lưu ý về tình huống:

  1. Tôi đang chạy R 2.15.1 trên MacBook Pro chạy Windows XP trên phân vùng bootcamp.
  2. Rõ ràng là có điều gì đó không ổn đối với tệp không gian làm việc này, vì nó chỉ nặng ~ 80kb trong khi tất cả các tệp khác của tôi thường> 10.000
  3. Cuối tuần qua, tôi đã chạy một chương trình mô hình hóa bên ngoài trong R và lưu trữ đầu ra của nó cho các đối tượng khác nhau. Tôi đã chạy một số lần lặp lại của mô hình trong vài ngày, ví dụ: output_Saturday <- call_model ()
  4. Không có gì đặc biệt đối với đầu ra của mô hình, nó chỉ là một danh sách với các vị trí cho betas, ma trận VC, đặc điểm kỹ thuật của mô hình, v.v.

9
Đoán: nó không phải là một tệp không gian làm việc, nó là một nhật ký của các lệnh R.
Joshua Ulrich

4
Tôi nghi ngờ điều tương tự, hãy thử tải nó bằng source(filename)thay vì load(filename).
nograpes

Bummmer - Sẽ phải kiểm tra. Tôi ước tôi có thể khẳng định đó là một sai lầm của người mới bắt đầu.
N Brouwer

1
Tương tự như những gì @JoshuaUlrich đã nói, tôi đã chỉnh sửa loadmột thứ mà tôi đã chỉnh sửa write.tablehơn là chỉnh sửa savevà gặp lỗi này. Giáo sư.
isomorphismes

Gặp lỗi này khi tôi tải cơ sở dữ liệu với load, nơi loadDbsẽ được sử dụng.
mt1022

Câu trả lời:


112

Tôi gặp lỗi đó khi tôi vô tình sử dụng load()thay vì source()hoặc readRDS().


3
Tôi cũng vậy, khi tôi vô tình sử dụng load()thay thế read.csv(). : p
Waldir Leoncio

35
Tôi cũng vậy, phần 2, khi tôi vô tình sử dụng load()thay vì readRDS()(vâng, 9 tháng sau, tôi quay lại đây vì khá nhiều lỗi tương tự).
Waldir Leoncio

34

Cũng cần lưu ý những điều sau từ tài liệu của Nhóm R Core tóm tắt những thay đổi trong các phiên bản của R sau v3.5.0 ( tại đây ):

R có định dạng tuần tự hóa mới (phiên bản 3) hỗ trợ tuần tự hóa tùy chỉnh các đối tượng khung ALTREP ... Dữ liệu được tuần tự hóa ở định dạng 3 không thể đọc được bởi các phiên bản của R trước phiên bản 3.5.0.

Tôi gặp sự cố này khi tôi lưu không gian làm việc trong v3.6.0, sau đó chia sẻ tệp với đồng nghiệp đang sử dụng v3.4.2. Tôi đã có thể giải quyết vấn đề bằng cách thêm "version = 2" vào chức năng lưu của mình.


2
Điều này là vô cùng hữu ích!
wolfsatthedoor

Đây là con đường.
user2961927

Cảm ơn! Điều này đã giúp trong trường hợp của tôi (vừa cài đặt R từ kho lưu trữ ubuntu - và cố gắng mở tệp RData mà tôi đã tạo vài tuần trước trên một máy khác sử dụng phiên bản R mới hơn một chút)
lebatsnok

18

Giả sử tệp của bạn có tên là "myfile.ext"

Nếu tệp bạn đang cố tải không phải là R-script, bạn sẽ sử dụng

source("myfile.ext")

bạn có thể thử readRDShàm và gán nó cho một tên biến:

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

9

Con số kỳ diệu đến từ các hệ thống kiểu UNIX trong đó một vài byte đầu tiên của tệp chứa một điểm đánh dấu cho biết loại tệp.

Lỗi này cho biết bạn đang cố gắng tải loại tệp không hợp lệ vào R. Vì một số lý do, R không còn nhận dạng tệp này là tệp không gian làm việc R.


6

Cài đặt readrgói, sau đó sử dụng library(readr).


1
Mẹo hay ... Tôi đã phải thử một vài chức năng của gói nhưng readr::rất dễ dàng để quét qua các chức năng. readr::read_rdslà những gì đã làm việc cho tôi cuối cùng.
Matt Bannert

4

Nó cũng xảy ra khi bạn cố gắng load()một đối tượng rds thay vì sử dụng

object <- readRDS("object.rds")

2

Tôi gặp lỗi khi xây dựng gói R (sử dụng roxygen2)

Nguyên nhân trong trường hợp của tôi là tôi đã tiết kiệm data/mydata.RDatavới saveRDS()hơn là save(). Ví dụsave(iris, file="data/iris.RData")

Điều này đã khắc phục sự cố cho tôi. Tôi tìm thấy thông tin này ở đây

Cũng lưu ý rằng với save()/ load()đối tượng được tải với cùng tên mà nó được lưu ban đầu (nghĩa là bạn không thể đổi tên nó cho đến khi nó đã được tải vào môi trường R với tên mà nó đã có khi bạn lưu lần đầu).


1

Tôi đã gặp sự cố này khi tôi lưu tệp Rdata trong phiên bản R cũ hơn và sau đó tôi cố gắng mở trong một phiên bản mới. Tôi đã giải quyết bằng cách cập nhật phiên bản R của mình lên phiên bản mới nhất.


0

Nếu bạn đang làm việc với devtoolshãy thử lưu các tệp bằng:

devtools::use_data(x, internal = TRUE)

Sau đó, xóa tất cả các tệp đã lưu trước đó.

Từ tài liệu:

nội bộ Nếu FALSE, lưu từng đối tượng trong các tệp .rda riêng lẻ trong thư mục dữ liệu. Chúng có sẵn bất cứ khi nào gói được tải. Nếu TRUE, lưu trữ tất cả các đối tượng trong một tệp R / sysdata.rda. Những đối tượng này chỉ có sẵn trong gói.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.