memCompress
位于 base
包(package)。 说明
原始向量的内存中压缩或解压缩。
用法
memCompress(from, type = c("gzip", "bzip2", "xz", "none"))
memDecompress(from,
type = c("unknown", "gzip", "bzip2", "xz", "none"),
asChar = FALSE)
参数
from |
原始向量。对于 |
type |
字符串,压缩类型。可以缩写为单个字母,默认为第一个选项。 |
asChar |
逻辑:结果是否应该转换为字符串?注意:字符串有 字节的限制,因此原始向量应用于大型输入。 |
细节
type = "none"
不变地传递输入,但如果 type
是变量,则可能有用。
type = "unknown"
尝试检测所应用的压缩类型(如果有):这对于 bzip2
压缩始终会成功,并且如果有合适的标头,对于其他形式也会成功。如果未检测到压缩类型,则与 type = "none"
相同,但会发出警告。
gzip
压缩使用底层库的默认压缩级别(通常是 6
)。它支持 RFC 1950 格式,有时称为 ‘zlib’ 格式,用于压缩和解压缩,并且仅支持 RFC 1952 解压缩,‘gzip’ 格式(用页眉和页脚包装 ‘zlib’ 格式)。
bzip2
压缩始终添加标头 ("BZh"
)。底层库仅支持最多 元素的内存中(解)压缩。压缩相当于bzip2 -9
(默认值)。
使用 type = "xz"
压缩相当于使用 xz -9e
压缩文件(包括添加 ‘magic’ 标头):解压缩应处理由 xz
版本 4.999 及更高版本以及某些版本压缩的任何文件的内容lzma
。还有其他版本,特别是‘raw’ 流,目前尚未处理。
所有类型的压缩都可以扩展输入:对于 "gzip"
和 "bzip2"
,最大扩展是已知的,因此 memCompress
始终可以分配足够的空间。对于"xz"
,如果输出太大,压缩可能会失败(但极不可能)。
值
原始向量或字符串(如果 asChar = TRUE
)。
libdeflate
支持libdeflate
添加了库R4.4.0。它使用 RFC 1950 ‘zlib’ 格式的不同代码(以及用于解压缩的 RFC 1952),预计比使用参考(或系统)要快得多zlib
Library 。它用于type = "gzip"
如果可供使用的话。
标头和源代码可以从 https://github.com/ebiggers/libdeflate 下载,并且预构建版本适用于大多数 Linux 发行版。
例子
txt <- readLines(file.path(R.home("doc"), "COPYING"))
sum(nchar(txt))
txt.gz <- memCompress(txt, "g") # "gzip", the default
length(txt.gz)
txt2 <- strsplit(memDecompress(txt.gz, "g", asChar = TRUE), "\n")[[1]]
stopifnot(identical(txt, txt2))
## as from R 4.4.0 this is detected if not specified.
txt2b <- strsplit(memDecompress(txt.gz, asChar = TRUE), "\n")[[1]]
stopifnot(identical(txt2b, txt2))
txt.bz2 <- memCompress(txt, "b")
length(txt.bz2)
## can auto-detect bzip2:
txt3 <- strsplit(memDecompress(txt.bz2, asChar = TRUE), "\n")[[1]]
stopifnot(identical(txt, txt3))
## xz compression is only worthwhile for large objects
txt.xz <- memCompress(txt, "x")
length(txt.xz)
txt3 <- strsplit(memDecompress(txt.xz, asChar = TRUE), "\n")[[1]]
stopifnot(identical(txt, txt3))
## test decompressing a gzip-ed file
tf <- tempfile(fileext = ".gz")
con <- gzfile(tf, "w")
writeLines(txt, con)
close(con)
(nf <- file.size(tf))
# if (nzchar(Sys.which("file"))) system2("file", tf)
foo <- readBin(tf, "raw", n = nf)
unlink(tf)
## will detect the gzip header and choose type = "gzip"
txt3 <- strsplit(memDecompress(foo, asChar = TRUE), "\n")[[1]]
stopifnot(identical(txt, txt3))
也可以看看
extSoftVersion
表示正在使用的 zlib
或 libdeflate
、 bzip2
和 xz
库的版本。
https://en.wikipedia.org/wiki/Data_compression for background on data compression, https://zlib.net/, https://en.wikipedia.org/wiki/Gzip, http://www.bzip.org/, https://en.wikipedia.org/wiki/Bzip2, https://tukaani.org/xz/ and https://en.wikipedia.org/wiki/XZ_Utils for references about the particular schemes used.
相关用法
- R memlimits 查询和设置堆大小限制
- R memory.profile 分析 Cons 单元的使用情况
- R merge 合并两个 DataFrame
- R message 诊断信息
- R mean 算术平均值
- R mtfrm 匹配辅助函数
- R make.unique 使字符串唯一
- R missing 正式论证有价值吗?
- R matrix 矩阵
- R matmult 矩阵乘法
- R maxCol 求矩阵中的最大位置
- R mode 对象的(存储)模式
- R match 价值匹配
- R match.arg 使用部分匹配的参数验证
- R mat.or.vec 创建矩阵或向量
- R mapply 将函数应用于多个列表或向量参数
- R marginSums 计算表格边距
- R make.names 命名语法上有效的名称
- R match.call 参数匹配
- R match.fun 提取名称指定的函数
- R file.path 构造文件路径
- R grep 模式匹配和替换
- R getwd 获取或设置工作目录
- R vector 向量 - 创建、强制等
- R lapply 对列表或向量应用函数
注:本文由纯净天空筛选整理自R-devel大神的英文原创作品 In-memory Compression and Decompression。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。