gpt4 book ai didi

r - saveRDS() 和 readRDS() 关于对象属性的行为

转载 作者:行者123 更新时间:2023-12-02 03:39:59 26 4
gpt4 key购买 nike

saveRDSreadRDS 是否相应地保存和恢复所有对象的属性,包括由应用程序创建的属性(通过 attr)?我尝试使用这种方法而不是保存加载,试图找到下面链接的问题的解决方法。然而,情况似乎并非如此,除非我做错了什么:Can I access R data objects' attributes without fully loading objects from file? .

最佳答案

是的,他们这样做:

test <- structure(1:10, names=LETTERS[1:10], color='red', xxx='yyy')
attr(test, which='uuu') <- 'zzz'
test
## A B C D E F G H I J
## 1 2 3 4 5 6 7 8 9 10
## attr(,"color")
## [1] "red"
## attr(,"xxx")
## [1] "yyy"
## attr(,"uuu")
## [1] "zzz"
saveRDS(test, '/tmp/test.rds')
test2 <- readRDS('/tmp/test.rds')
identical(test, test2)
## [1] TRUE

R 严重依赖这些函数(及其变体)。例如,它们用于保存用户的工作空间。因此,如果他们没有存储这些属性,那就很奇怪了。

但是,请注意,您不能用它们存储一些“动态创建”的对象。这包括文件和 SQL 数据库连接处理程序、临时 SQL 结果处理程序等。RCpp 编译函数的示例:

library('Rcpp')
library('inline')
cppFunction("int one() { return 1; }")
one() # it works
## [1] 1
one # contains a pointer to dynamically allocated mem chunk
## function ()
## .Primitive(".Call")(<pointer: 0x7f52c33a7680>)
saveRDS(one, '/tmp/one.rds')

现在我们重新启动 R...

one <- readRDS('/tmp/one.rds')
one # the pointer is no longer valid
## function ()
## .Primitive(".Call")(<pointer: (nil)>)
one() # doesn't work
## Error in .Primitive(".Call")(<pointer: (nil)>) :
## NULL value passed as symbol address

关于r - saveRDS() 和 readRDS() 关于对象属性的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23721750/

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