R言語でオブジェクトを保存する関数やその実行例について見ていきます。
この記事は次のような人におすすめです。
こんな方におすすめ
- Rの変数(オブジェクト)を保存したい。
- 解析の結果が得られたけど、txtやcsvファイルに保存してしまうと値が微妙に変わってしまう。
オブジェクトの保存方法だけでなく、保存したオブジェクトを再度読み込む例も紹介します。
この記事で扱うRスクリプトは以下からダウンロードできます。
R言語 オブジェクトの保存
オブジェクトの削除の方法については次の記事を参照してください。
【R言語】使っていない変数の削除の仕方 キャッシュの削除
R言語の使っていない変数の削除の例を紹介します。 Rで大きなデータを使っているとメモリ不足に陥ったり、実行速度が遅くなったりすることがよくあります。 Rでは一度作られた変数は自分で削除するまで、キャッ ...
続きを見る
オブジェクトの保存
早速、オブジェクトを保存する関数を紹介します。
関数save, save.image
次の関数save、save.imageでオブジェクトの保存ができます。
関数を実行すると、オブジェクトはRDataというファイルに保存されます。
関数saveとsave.imageの違いは、save.imageを実行するとすべてのオブジェクトが保存される点です。
save(…, list = character(), file = stop("'file' must be specified"), ascii = FALSE, version = NULL, envir = parent.frame(), compress = isTRUE(!ascii), compression_level, eval.promises = TRUE, precheck = TRUE)
save.image(file = ".RData", version = NULL, ascii = FALSE, compress = !ascii, safe = TRUE)
引数は以下の通りです。
... | 保存するオブジェクトの名前。 |
list | character型のベクトル。保存するオブジェクトの名前を含むベクトル。 |
file | オブジェクトの保存先のファイル名。 |
ascii | logical型。TRUEのとき、ASCIIコードでデータが保存される。FALSEのときバイナリーで保存される。 |
version | ワークスペースの形式のバージョン。NULLのときデフォルトの形式(3)が適用される。 |
envir | 保存するオブジェクトのenvironment。 |
compress | logical型またはcharacter型。保存するファイルを圧縮するかどうか。TRUEまたは"gzip"のときgzip、他にも"bzip2"や"xzを指定できる。 |
compress_level | interger型。圧縮のレベルを指定する。 |
eval.promises | logical型。保存前にオブジェクトを強制するかどうか。 |
precheck | logical型。保存する前にオブジェクトが存在するかチェックするかどうか。 |
safe | logical型。TRUEのとき、ワークスペースの保存のための一時ファイルを用いる。 |
type | Windows GDIかcairographicsでプロットするか。 |
antialias | 長さ1のcharacter型のベクトル。type = "windows"において適用できる値とフォントへの効果についてはwindowsを参照されたい。 |
symbolfamily | cairographicsでのみ用いる。長さ1のcharacter型のベクトル。"symbol"フォントとして用いるフォントファミリ―を指定する。 |
実行例
オブジェクトの保存の仕方について見ていきます。
関数saveとsave.imageの2つの使用例を以下にまとめました。
関数save
次のnumeric型の変数a、character型の変数b、numeric型のベクトルnumbers、character型のベクトルalphabet、データフレームdatasetを例にオブジェクトの保存を行っていきます。
1 2 3 4 5 6 | #関数save a <- 0 b <- "a" numbers <- seq_len(26) alphabet <- letters[numbers] dataset <- data.frame(numbers, alphabet) |
オブジェクトを保存するには、次のように関数saveの引数に変数を渡してあげます。
1 2 | save(a, b, file = "workspace.RData") #aとbを保存する save(list = c("a", "b"), file = "workspace.RData") #引数listの場合 |
1行目のようにオブジェクトを直接渡す方法と、2行目のようにオブジェクトの名前をcharacter型で渡す方法があります。
オブジェクトが保存されているかどうかチェックしてみます。
関数removeですべてのオブジェクトを削除し、関数loadを使うことで先ほど保存したRDataファイルを読み込みます。
1 2 | remove(list = ls()) load("workspace.RData") |
関数lsでオブジェクトを参照すると、先ほど保存した変数aとbが読み込まれているのが確認できます。
1 2 | > ls() [1] "a" "b" |
また、すべてのオブジェクトを保存する際は、関数saveの引数listを次のようにします。
1 2 3 4 5 6 7 | a <- 0 b <- "a" numbers <- seq_len(26) alphabet <- letters[numbers] dataset <- data.frame(numbers, alphabet) save(list = ls(), file = "workspace.RData") #全オブジェクトを保存する |
同様に全変数を削除しRDataファイルを読み込むと、保存した全オブジェクトを読み込むことができます。
1 2 3 4 | > remove(list = ls()) > load("workspace.RData") > ls() [1] "a" "alphabet" "b" "dataset" "numbers" |
関数save.image
関数save.imageを実行すると、全オブジェクトを保存することが可能です。
関数saveの実行例で全オブジェクトを保存する例を紹介しましたが、save.imageでも同様の結果が得られます。
1 2 3 4 5 6 7 8 | #関数save.image a <- 0 b <- "a" numbers <- seq_len(26) alphabet <- letters[numbers] dataset <- data.frame(numbers, alphabet) save.image("workspace.RData") |
全オブジェクトをいったん削除し、RDataを読み込むと全オブジェクトがちゃんと保存されているのが分かります。
1 2 3 4 | > remove(list = ls()) > load("workspace.RData") > ls() [1] "a" "alphabet" "b" "dataset" "numbers" |
エディターからオブジェクトを保存する流れ
ここまでの操作は関数を使うことなく、エディター上からでもできます。
オブジェクトの保存と読み込みの二つに分けてみていきます。
保存の流れ
R studioの場合、下のオブジェクトに示すように以下の流れでオブジェクトを保存することができます。
右上のEnvironmentの下の青いアイコンをからオブジェクトを保存することが可能です。
オブジェクトの保存の流れ
- 右上のEnvironmentの直下にある青いアイコンをクリック
- ファイル名を入力しSaveをクリックすると保存完了
読み込みの流れ
続いて、オブジェクトの読み込みの流れです。
保存したRDataをエディタから読み込むには次のようにします。
オブジェクトの読み込みの流れ
- 右上のEnvironmentの直下にある左のフォルダのアイコンをクリック
- ファイル名を入力しOpenをクリックすると読み込み完了
まとめ
R言語でオブジェクトを保存する流れや関数を紹介しました。
関数saveとsave.imageでワークスペースのオブジェクトを保存することが可能です。
保存したイブジェクトを再度読み込みたい場合は、関数loadを使ってRDataファイルを読み込みます。