当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


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