gpt4 book ai didi

r - 您能否将表示 RDS 文件的 R 原始向量转换回 R 对象,而无需往返磁盘?

转载 作者:行者123 更新时间:2023-12-02 02:15:29 25 4
gpt4 key购买 nike

我有一个 RDS 文件,它通过 curl::curl_fetch_memory()(通过 httr)上传然后下载 - 这为我提供了 R 中的原始向量。

有没有办法读取表示 RDS 文件的原始向量以返回原始 R 对象?还是必须先写入磁盘?

我有一个类似于下面的设置:

saveRDS(mtcars, file = "obj.rds")
# upload the obj.rds file
...
# download it again via httr::write_memory()
...

obj
# [1] 1f 8b 08 00 00 00 00 00 00 03 ad 56 4f 4c 1c 55 18 1f ca 02 bb ec b2 5d
# ...
is.raw(obj)
#[1] TRUE

似乎 readRDS() 应该用来解压缩它,但它需要一个连接对象,我不知道如何从 R 原始向量创建连接对象 - rawConnection () 看起来很有前途但给出了:

rawConnection(obj)
#A connection with
#description "obj"
#class "rawConnection"
#mode "r"
#text "binary"
#opened "opened"
#can read "yes"
#can write "no"
readRDS(rawConnection(obj))
#Error in readRDS(rawConnection(obj)) : unknown input format

查看 readRDS 看起来它在下面使用了 gzlib() 但无法让它与原始矢量对象一起使用。

如果通过 httr::write_disk() 下载 -> curl::curl_fetch_disk() -> readRDS() 然后它的全部很好,但这是磁盘往返,我想知道它是否可以针对大文件进行优化。

最佳答案

默认情况下,RDS 文件流是 gzip 压缩的。要读取原始连接,您需要手动将其包装到 gzcon 中:

con = rawConnection(obj)
result = readRDS(gzcon(con))

即使流 gzipped,这也有效。但不幸的是,如果使用不同的受支持压缩方法(例如 'bzip2')创建 RDS 文件,它会失败。不幸的是,R 似乎没有与 bzip2 或 xz 等效的 gzcon。对于这些格式,唯一的办法似乎是将数据写入磁盘。

关于r - 您能否将表示 RDS 文件的 R 原始向量转换回 R 对象,而无需往返磁盘?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67227239/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com