web-dev-qa-db-ja.com

ワークスペースをロードする際の「不正なマジック番号」エラーの原因と回避方法

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. このワークスペースファイルの重量はわずか80キロバイトで、他のすべてのファイルは通常> 10,000
  3. 週末、Rで外部モデリングプログラムを実行し、その出力をさまざまなオブジェクトに保存していました。数日間にわたってモデルの反復をいくつか実行しました。たとえば、output_Saturday <-call_model()
  4. モデル出力には特別なものはありません。ベータ、VCマトリックス、モデル仕様などのスロットを含むリストのみです。
70
N Brouwer

load()またはsource()の代わりに誤ってreadRDS()を使用すると、このエラーが発生しました。

87
Chris SH

ファイルの名前が「myfile.ext」であると仮定します

ロードしようとしているファイルがRスクリプトではない場合は、使用します

source("myfile.ext")

readRDSfunctionを試して、変数名に割り当てることができます。

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

マジックナンバーは、ファイルの最初の数バイトがファイルタイプを示すマーカーを保持しているUNIXタイプのシステムから取得されます。

このエラーは、無効なファイルタイプをRにロードしようとしていることを示します。何らかの理由で、RはこのファイルをRワークスペースファイルとして認識しなくなりました。

6

また、v3.5.0以降のRのバージョンの変更点をまとめたRコアチームのドキュメントから、次の点に注目する価値があります( here ):

Rには、ALTREPフレームワークオブジェクトのカスタムシリアル化をサポートする新しいシリアル化フォーマット(バージョン3)があります...フォーマット3のシリアル化されたデータは、Rバージョン3.5.0。

V3.6.0でワークスペースを保存し、v3.4.2を使用している同僚とファイルを共有すると、この問題が発生しました。保存機能に「バージョン= 2」を追加することで問題を解決できました。

4
jhearn

readrパッケージをインストールしてから、library(readr)を使用します。

4
Aurelia Aurita

また、使用する代わりにload() rdsオブジェクトを試みるときにも発生します

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

Rパッケージのビルド時にエラーが発生しました(roxygen2を使用)

私の場合の原因は、saveRDS()ではなくsave()data/mydata.RDataを保存したことです。例えば。 save(iris, file="data/iris.RData")

これで問題が解決しました。この情報を見つけました こちら

また、save()/load()を使用すると、オブジェクトは最初に保存したときと同じ名前でロードされます(つまり、最初に保存したときの名前でR環境にロードされるまで名前を変更することはできません)。

0
user5783745

古いバージョンのRでRdataファイルを保存してから新しいバージョンで開こうとしたときに、この問題が発生しました。 Rバージョンを最新に更新することで解決しました。

devtoolsを使用している場合は、次を使用してファイルを保存してください。

devtools::use_data(x, internal = TRUE)

次に、以前に保存したすべてのファイルを削除します。

ドキュメントから:

内部FALSEの場合、各オブジェクトをデータディレクトリの個々の.rdaファイルに保存します。これらはパッケージがロードされるたびに使用可能です。TRUEの場合、すべてのオブジェクトを単一のR/sysdata.rdaファイルに保存します。パッケージ内で利用可能。

0
mariope