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


93

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

9
推測:これはワークスペースファイルではなく、Rコマンドのログです。
Joshua Ulrich

4
同じだと思うので、source(filename)ではなくでロードしてみてくださいload(filename)
nograpes 2012

バンマー-チェックする必要があります。初心者の間違いだったと主張できたらいいのに。
N Brouwer 2012

1
@JoshuaUlrichが言ったことと同様に、私loadwrite.table編集するのではなく自分が編集したものをsave編集し、このエラーが発生しました。おっとっと。
同型14

を使用してデータベースをロードするとload、このエラーが発生しますloadDb
mt1022 2017年

回答:


112

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


3
誤ってのload()代わりに使用したときもそうでしたread.csv()。:p
Waldir Leoncio 2014

35
それで、パート2のload()代わりに誤って使用したときもreadRDS()(はい、9か月後、ほぼ同じ間違いでここに戻ってきました)。
Waldir Leoncio 2014年

34

また、Rコアチームによるドキュメントから、v3.5.0以降のRのバージョンの変更点をまとめた次の点にも注意してください(ここ)。

Rには、ALTREPフレームワークオブジェクトのカスタムシリアル化をサポートする新しいシリアル化形式(バージョン3)があります... 形式3のシリアル化されたデータは、バージョン3.5.0より前のバージョンのRでは読み取ることができません。

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


2
これは信じられないほど役に立ちます!
wolfsatthedoor

これが道です。
user2961927

ありがとう!これは私の場合に役立ちました(ubuntuリポジトリからRをインストールしたばかりで、数週間前に作成したRDataファイルを少し新しいバージョンのRを使用して別のマシンで開こうとしました)
lebatsnok

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、2017年

4

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

object <- readRDS("object.rds")

2

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

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

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

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



0

で作業している場合はdevtools、次の方法でファイルを保存してみてください。

devtools::use_data(x, internal = TRUE)

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

ドキュメントから:

internal FALSEの場合、各オブジェクトをデータディレクトリの個別の.rdaファイルに保存します。これらは、パッケージがロードされるときにいつでも使用できます。TRUEの場合、すべてのオブジェクトを単一のR / sysdata.rdaファイルに格納します。これらのオブジェクトは、パッケージ内でのみ使用できます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.