小编ode*_*ssa的帖子

R:使用函数输出中的save()保存list()时出现奇怪的行为

我目前在使用R保存列表和"子列表"时遇到了一个奇怪的问题.标题可能不明确,但这是令我不安的问题:

给出一些数据(这里的数据完全是人为的,但问题不在于模型的相关性):

set.seed(1)
a0 = rnorm(10000,10,2)
b1 = rnorm(10000,10,2)
b2 = rnorm(10000,10,2)
b3 = rnorm(10000,10,2)
data = data.frame(a0,b1,b2,b3)
Run Code Online (Sandbox Code Playgroud)

并且函数返回复杂对象列表(比如说lm()对象):

test = function(k){
    tt = vector('list',k)
    for(i in 1:k) tt[[i]] = lm(a0~b1+b2+b3,data = data)
    tt
}
Run Code Online (Sandbox Code Playgroud)

我们的测试函数返回一个lm()对象列表.让我们看看这个对象的大小:

ok = test(2)
object.size(ok)
> object.size(ok)
4019336 bytes 
Run Code Online (Sandbox Code Playgroud)

让我们创建ok2一个完全相似的对象但不在函数内:

ok2 = vector('list',2)
ok2[[1]] = lm(a0~b1+b2+b3,data = data)
ok2[[2]] = lm(a0~b1+b2+b3,data = data)
Run Code Online (Sandbox Code Playgroud)

...并检查他的大小:

> object.size(ok2)
4019336 bytes
Run Code Online (Sandbox Code Playgroud)

这里我们是,ok并且ok2完全相同,所以告诉我们R.问题,如果我们将这些对象作为R对象保存在硬盘上(带save()saveRDS()):

save(ok,file='ok.RData')
save(ok2,file='ok2.RData') …
Run Code Online (Sandbox Code Playgroud)

r

4
推荐指数
1
解决办法
425
查看次数

标签 统计

r ×1