就内存而言,在R中存储函数列表或数组列表是否更昂贵?这是一个例子
n=1000
x.mat = matrix(rnorm(n^2,0,1),n,n)
z=apply(x.mat, 2, approxfun)
> object.size(z)
11736040 bytes
> object.size(x.mat)
8000200 bytes
n=10000
x.mat = matrix(rnorm(n^2,0,1),n,n)
z=apply(x.mat, 2, approxfun)
> object.size(z)
117360040 bytes
> object.size(x.mat)
800000200 bytes
看起来如果您的数据非常大,则将其作为函数存储所需的内存较少,即使该函数返回相同的点列表也是如此。关于何时使用函数与实际数据点本身存储数据有什么一般的经验法则(当然,实际计算这些函数需要时间,或者可能有更多时间来评估它们以获得相关数据)?也许这是一个非常愚蠢的问题,但我在这里找不到任何相关内容。
答案 0 :(得分:3)
我认为object.size
在这里欺骗你,因为它没有考虑存储在环境中的东西。考虑这个函数生成器,它在其环境中保留一个长向量:
g =
function(){
a = 1:10000
foo = function(){ sum(a) }
foo
}
> f=g()
> object.size(f)
4160 bytes
非常小,但仍然存储了10,000个数字:
> f()
[1] 50005000
那是在哪?这里:
> object.size(with(environment(f),a))
40040 bytes
为了更好地了解尺寸,请保存而不压缩:
> save(f,file="f.Data",compress=FALSE)
> file.info("f.Data")$size
[1] 41368