當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


R save 保存 R 對象


R語言 save 位於 base 包(package)。

說明

save寫一個外部表示R對象到指定的文件。稍後可以使用該函數從文件中讀回對象load或者attach(或者data在某些情況下)。

save.image() 隻是一個 short-cut ,用於“保存我當前的工作空間”,即 save(list = ls(all.names = TRUE), file = ".RData", envir = .GlobalEnv)q("yes") 也會發生這種情況。

用法

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

包含要保存的對象名稱的字符向量(或 NULL )。

file

a (可寫binary-mode) connection 或將保存數據的文件名(當tilde expansion 完成時)。必須是 save.imageversion = 1 的文件名。

ascii

如果是 TRUE ,則寫入數據的 ASCII 表示形式。 ascii 的默認值為FALSE,這會導致寫入二進製文件。如果 NAversion >= 2 ,則使用不同的 ASCII 表示形式,將雙精度/複數寫入為二進製分數。

version

要使用的工作區格式版本。NULL指定當前默認格式 (3)。版本 1 是默認版本R0.99.0 至R1.3.1 和版本 2R1.4.0 至 3.5.0。支持版本 3R3.5.0。

envir

搜索要保存的對象的環境。

compress

邏輯或字符串指定保存到命名文件是否要使用壓縮。 TRUE 對應於 gzip 壓縮,字符串 "gzip""bzip2""xz" 指定壓縮類型。當 file 是連接且工作區格式版本 1 時被忽略。

compression_level

整數:要使用的壓縮級別。對於 gzip 壓縮,默認為 6;對於 bzip2xz 壓縮,默認為 9。有關可能的值及其優點,請參閱 file 的幫助。

eval.promises

邏輯:在保存之前是否應該強製承諾對象?

precheck

邏輯:在開始保存之前(特別是在打開文件/連接之前)是否應該檢查對象的存在?不適用於版本 1 保存。

safe

合乎邏輯的。如果是 TRUE ,則使用臨時文件來創建保存的工作區。如果保存成功,臨時文件將重命名為file。如果保存失敗,這會保留現有工作區file,但代價是在保存期間使用額外的磁盤空間。

細節

... 中指定為符號(或字符串)或在 list 中指定為字符向量的對象名稱用於從環境 envir 中查找對象。默認情況下 promises 會被評估,但如果 eval.promises = FALSE 承諾被保存(連同它們的評估環境)。 (嵌入在對象中的 Promise 總是在未計算的情況下保存。)

全部R平台在二進製 save-d 文件中使用 C int 和 double 的 XDR (bigendian) 表示,並且這些可以跨所有平台移植R平台。

ASCII 保存曾經對於在平台之間移動數據很有用,但現在主要具有曆史意義。它們比不使用壓縮的二進製保存更緊湊,但讀取和寫入幾乎總是較慢:二進製保存比 ASCII 保存壓縮得更好。此外,十進製 ASCII 保存可能無法準確恢複雙精度/複數值,並且恢複什麽值可能取決於R平台。

asciicompresssafeversion 參數的默認值可以使用 "save.defaults" 選項(由 savesave.image 使用)進行修改,另請參閱“示例”部分。如果設置了 "save.image.defaults" 選項,則對於函數 save.image,它優先於 "save.defaults" 使用(這允許它具有不同的默認值)。此外,compression_level 可以是 "save.defaults" 選項的一部分。

尚未打開的連接將以 "wb" 模式打開。提供打開且非二進製模式的連接會產生錯誤。

壓縮

通過壓縮可以大大減小大文件的大小。特定的 46MBR未壓縮的對象在 2 秒內保存為 35MB,使用壓縮後保存為 22MBgzip8 秒內壓縮 19MBbzip213 秒內壓縮 9.4MBxz40秒內壓縮。加載時間分別為 1.3、2.8、5.5 和 5.7 秒。這些結果僅供參考,但相對性能確實取決於實際文件:xz這裏壓縮得異常好。

稍後可以壓縮(使用gzip,bzip2或者xz) 保存的文件compress = FALSE:效果與壓縮保存相同。此外,保存的文件可以在不同的壓縮方案下解壓縮和重新壓縮(參見resaveRdaFiles尋找一種從內部做到這一點的方法R)。

並行壓縮

file 可以是一個連接,可用於通過 pipe 連接使用外部並行壓縮實用程序,例如 pigz ( https://zlib.net/pigz/ ) 或 pbzip2 ( https://launchpad.net/pbzip2 )。例如,使用8個線程,

    con <- pipe("pigz -p8 > fname.gz", "wb")
    save(myObj, file = con); close(con)

    con <- pipe("pbzip2 -p8 -9 > fname.bz2", "wb")
    save(myObj, file = con); close(con)

    con <- pipe("xz -T8 -6 -e > fname.xz", "wb")
    save(myObj, file = con); close(con)

其中最後一個需要 xz 5.1.1 或更高版本,並支持多線程(並行壓縮僅對大型對象有效:在第 6 級,它將壓縮為 12MB 的序列化塊)。

警告

... 參數僅給出要保存的對象的名稱:在 envir 參數給出的環境中搜索它們,並且作為參數給出的實際對象不必是找到的對象。

已保存R對象是二進製文件,即使是用ascii = TRUE,因此請確保它們在傳輸時不進行行尾標記和 8 位字符的轉換。在所有平台上,這些行均由 LF 分隔。

盡管默認版本在之間沒有更改R1.4.0 和R3.4.4 也不自此R3.5.0,這並不意味著保存的文件一定向後兼容。您將能夠將保存的圖像加載到早期版本的R它支持其版本,除非使用後來的添加(例如版本 2、原始向量、外部指針和一些 S4 對象)。

其中一個“後來的補充”是長向量,引入R3.0.0 並且隻能在 64 位平台上加載。

加載保存的文件ASCII = NA需要符合 C99 的 C 函數sscanf:這是 Windows 上的問題,首先在R3.1.2:該格式的版本 2 文件應該在早期版本中可讀R在所有其他平台上。

注意

用於保存單R物體,saveRDS()最適合save(),特別是因為函數性的的性質readRDS(),相對於load().

失敗的最常見原因是當前目錄缺乏寫入權限。對於 save.image 以及在會話結束時保存,這將通過類似消息顯示

    Error in gzfile(file, "wb") : unable to open connection
    In addition: Warning message:
    In gzfile(file, "wb") :
      cannot open compressed file '.RDataTmp',
      probable reason 'Permission denied'

例子


x <- stats::runif(20)
y <- list(a = 1, b = TRUE, c = "oops")
save(x, y, file = "xy.RData")
save.image() # creating ".RData" in current working directory
unlink("xy.RData")

# set save defaults using option:
options(save.defaults = list(ascii = TRUE, safe = FALSE))
save.image() # creating ".RData"
if(interactive()) withAutoprint({
   file.info(".RData")
   readLines(".RData", n = 7) # first 7 lines; first starts w/ "RDA"..
})
unlink(".RData")

也可以看看

dputdumploaddata

有關底層序列化格式的其他接口,請參閱 serializesaveRDS

相關用法


注:本文由純淨天空篩選整理自R-devel大神的英文原創作品 Save R Objects。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。