我曾经认为R语言在存储对象时有一个标准的开销(似乎至少对于整数向量是24字节),但简单的测试表明它比我意识到的要更加复杂。例如,使用随机抽样将整数向量长度限制在100以内(希望避免任何可能存在的狡猾的序列压缩技巧),我发现不同长度的向量可以具有相同的大小,如下所示:
> N = 100
> V = vector(length = 100)
> for(L in 1:N){
+ z = sample(N, L, replace = TRUE)
+ V[L] = object.size(z)
+ }
>
> options('width'=88)
> V
[1] 48 48 56 56 72 72 72 72 88 88 88 88 104 104 104 104 168 168 168 168
[21] 168 168 168 168 168 168 168 168 168 168 168 168 176 176 184 184 192 192 200 200
[41] 208 208 216 216 224 224 232 232 240 240 248 248 256 256 264 264 272 272 280 280
[61] 288 288 296 296 304 304 312 312 320 320 328 328 336 336 344 344 352 352 360 360
[81] 368 368 376 376 384 384 392 392 400 400 408 408 416 416 424 424 432 432 440 440
我对出现的
152
值印象深刻(观察:152 = 128 + 24,尽管280 = 256 + 24不如此显著)。有人能解释一下这些分配是如何产生的吗?我在文档中没有找到清晰的定义,尽管V细胞出现了。
object.size
实现的一种偏差。请注意帮助文档中将其描述为一个估计值... - Nick Sabbeobject.size()
。感谢指引。据我所知,不确定性是由于可能的属性(或甚至编码)问题而产生的。但是在生活中没有比整数向量更简单的东西了。 - Iterator