작업 공간을로드 할 때 "나쁜 매직 넘버"오류의 원인과이를 방지하는 방법은 무엇입니까?


96

내 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. 부트 캠프 파티션에서 Windows XP를 실행하는 MacBook Pro에서 R 2.15.1을 실행하고 있습니다.
  2. 이 작업 공간 파일의 무게는 80kb에 불과하지만 다른 모든 파일은 일반적으로 10,000 이상이기 때문에 분명히 잘못된 것이 있습니다.
  3. 주말 동안 저는 R에서 외부 모델링 프로그램을 실행하고 출력을 다른 객체에 저장했습니다. 며칠 동안 모델을 여러 번 반복했습니다. 예 : output_Saturday <-call_model ()
  4. 모델 출력에는 특별한 것이 없으며 베타, VC 매트릭스, 모델 사양 등에 대한 슬롯이있는 목록 일뿐입니다.

9
추측하십시오 : 이것은 작업 공간 파일이 아니라 R 명령의 로그입니다.
여호수아 울리히

4
나는 똑같다고 생각하고 source(filename)대신 load(filename).
nograpes

Bummmer-확인해야합니다. 초심자 실수라고 주장 할 수 있으면 좋겠다.
N Brouwer

1
@JoshuaUlrich 말한 마찬가지로, 나는 load내가 한 일 에드 write.table보다는 에드 save에드이 오류가 발생했습니다. 죄송합니다.
isomorphismes

내가 가진 데이터베이스를로드 할 때이 오류가있어 load, loadDb사용되어야한다.
mt1022

답변:


113

실수 load()source()또는 대신 사용했을 때 오류가 발생했습니다 readRDS().


3
내가 실수로 load()대신 read.csv(). : p
Waldir Leoncio 2014

35
2 부도 실수로 load()대신 사용했을 때도 마찬가지 입니다 readRDS()(예, 9 개월 후 거의 같은 실수로 여기로 돌아 왔습니다).
Waldir Leoncio 2014

36

또한 v3.5.0 이후의 R 버전 변경 사항을 요약 한 R Core Team의 문서에서 다음 사항에 주목할 가치가 있습니다 ( 여기 ).

R에는 ALTREP 프레임 워크 개체의 사용자 지정 직렬화를 지원하는 새로운 직렬화 형식 (버전 3)이 있습니다. 형식 3의 직렬화 된 데이터는 버전 3.5.0 이전의 R 버전에서 읽을 수 없습니다.

v3.6.0에서 작업 공간을 저장 한 다음 v3.4.2를 사용하는 동료와 파일을 공유 할 때이 문제가 발생했습니다. 저장 기능에 "version = 2"를 추가하여 문제를 해결할 수있었습니다.


2
이것은 매우 도움이됩니다!
wolfsatthedoor

이게 방법이야.
user2961927

감사! 이것은 제 경우에 도움이되었습니다 (우분투 저장소에서 방금 R을 설치하고 약간 새로운 버전의 R을 사용하여 몇 주 전에 만든 RData 파일을 다른 컴퓨터
열려고했습니다

18

파일 이름이 "myfile.ext"라고 가정합니다.

로드하려는 파일이 R 스크립트가 아닌 경우 사용할 수 있습니다.

source("myfile.ext")

readRDS함수를 시도하고 변수 이름에 할당 할 수 있습니다 .

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

9

매직 넘버는 파일의 처음 몇 바이트에 파일 유형을 나타내는 마커가있는 UNIX 유형 시스템에서 제공됩니다.

이 오류는 유효하지 않은 파일 유형을 R로로드하려고 함을 나타냅니다. 어떤 이유로 R은이 파일을 더 이상 R 작업 공간 파일로 인식하지 않습니다.


6

readr패키지를 설치 한 다음 library(readr).


1
멋진 트릭 ... 몇 가지 팩 기능을 시도해야했지만 기능을 readr::쉽게 스캔 할 수 있습니다. readr::read_rds결국 나를 위해 일한 것입니다.
Matt Bannert

4

load()사용하는 대신 rds 개체 를 시도 할 때도 발생합니다.

object <- readRDS("object.rds")

2

R 패키지를 빌드 할 때 오류가 발생했습니다 (roxygen2 사용).

내 경우에는 원인은 내가 저장 한 것이 었 data/mydata.RDatasaveRDS()보다는 save(). 예save(iris, file="data/iris.RData")

이것은 나를 위해 문제를 해결했습니다. 여기 에서이 정보를 찾았 습니다

와 있음을 또한 참고 save()/ load()개체가 처음으로 저장되어있는 같은 이름에로드 (아직 당신이 처음에 저장된 때 가지고 있던 이름으로 R 환경에로드 될 때까지 즉, 당신이 그것을 이름을 바꿀 수 없습니다).


1

이전 버전의 R에서 Rdata 파일을 저장 한 다음 새 버전에서 열려고 할 때이 문제가 발생했습니다. 내 R 버전을 최신 버전으로 업데이트하여 해결했습니다.


0

작업하는 경우 다음 devtools을 사용하여 파일을 저장하십시오.

devtools::use_data(x, internal = TRUE)

그런 다음 이전에 저장 한 모든 파일을 삭제하십시오.

문서에서 :

내부 FALSE 인 경우 각 개체를 데이터 디렉터리의 개별 .rda 파일에 저장합니다. 패키지가로드 될 때마다 사용할 수 있습니다. TRUE 인 경우 모든 개체를 단일 R / sysdata.rda 파일에 저장합니다. 이러한 개체는 패키지 내에서만 사용할 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.