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 |
包含要保存的對象名稱的字符向量(或 |
file |
a (可寫binary-mode) connection 或將保存數據的文件名(當tilde expansion 完成時)。必須是 |
ascii |
如果是 |
version |
要使用的工作區格式版本。 |
envir |
搜索要保存的對象的環境。 |
compress |
邏輯或字符串指定保存到命名文件是否要使用壓縮。 |
compression_level |
整數:要使用的壓縮級別。對於 |
eval.promises |
邏輯:在保存之前是否應該強製承諾對象? |
precheck |
邏輯:在開始保存之前(特別是在打開文件/連接之前)是否應該檢查對象的存在?不適用於版本 1 保存。 |
safe |
合乎邏輯的。如果是 |
細節
在 ...
中指定為符號(或字符串)或在 list
中指定為字符向量的對象名稱用於從環境 envir
中查找對象。默認情況下 promises 會被評估,但如果 eval.promises = FALSE
承諾被保存(連同它們的評估環境)。 (嵌入在對象中的 Promise 總是在未計算的情況下保存。)
全部R平台在二進製 save-d 文件中使用 C int 和 double 的 XDR (bigendian) 表示,並且這些可以跨所有平台移植R平台。
ASCII 保存曾經對於在平台之間移動數據很有用,但現在主要具有曆史意義。它們比不使用壓縮的二進製保存更緊湊,但讀取和寫入幾乎總是較慢:二進製保存比 ASCII 保存壓縮得更好。此外,十進製 ASCII 保存可能無法準確恢複雙精度/複數值,並且恢複什麽值可能取決於R平台。
ascii
、 compress
、 safe
和 version
參數的默認值可以使用 "save.defaults"
選項(由 save
和 save.image
使用)進行修改,另請參閱“示例”部分。如果設置了 "save.image.defaults"
選項,則對於函數 save.image
,它優先於 "save.defaults"
使用(這允許它具有不同的默認值)。此外,compression_level
可以是 "save.defaults"
選項的一部分。
尚未打開的連接將以 "wb"
模式打開。提供打開且非二進製模式的連接會產生錯誤。
壓縮
通過壓縮可以大大減小大文件的大小。特定的 46MBR未壓縮的對象在 2 秒內保存為 35MB,使用壓縮後保存為 22MBgzip
8 秒內壓縮 19MBbzip2
13 秒內壓縮 9.4MBxz
40秒內壓縮。加載時間分別為 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")
也可以看看
相關用法
- R sample 隨機樣本和排列
- R strsplit 分割字符向量的元素
- R seq.Date 生成規則的日期序列
- R search 給出 R 對象的搜索路徑
- R solve 求解方程組
- R scan 讀取數據值
- R sprintf 使用 C 風格字符串格式化命令
- R stop 停止函數執行
- R sign 標誌函數
- R svd 矩陣的奇異值分解
- R strtoi 將字符串轉換為整數
- R source 從文件、連接或表達式中讀取 R 代碼
- R sQuote 引用文字
- R switch 選擇替代方案列表之一
- R substitute 替換和引用表達式
- R strrep 重複字符向量的元素
- R split 分組並重新集合
- R slice.index 數組中的切片索引
- R sort 對向量進行排序或排序
- R standardGeneric 形式化方法係統 – 調度 S4 方法
- R sequence 創建序列向量
- R startsWith 字符串是否以另一個字符串開頭或結尾?
- R system.file 查找 R 係統文件的名稱
- R strwrap 將字符串換行以設置段落格式
- R seek 重新定位連接的函數
注:本文由純淨天空篩選整理自R-devel大神的英文原創作品 Save R Objects。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。