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。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。