Я думал, что R имеет стандартные накладные расходы для хранения объектов (24 байта, кажется, по крайней мере для целых векторов), но простой тест показал, что он более сложный, чем я понял. Так, например, принимая целые векторы длиной до 100 (с использованием случайной выборки, в надежде, чтобы избежать любого sneaky sequence compression tricks that might be out there), я обнаружил, что разные векторы длины могут иметь один и тот же размер, как показано ниже:Размеры целочисленных векторов в R
> 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: О нет, это как-то странно, потому что я сильно зависим от 'object.size()'. Спасибо за указатель. Поскольку я читаю, что неопределенность возникает из-за возможной проблемы с атрибуцией (или, может быть, даже с кодировкой). Но в жизни не так уж много проще, чем целые векторы. – Iterator
Я согласен, хотя вы должны быть осторожны, так как повторное использование часто скрыто (просто посмотрите на object.size из двух огромных данных. Кадры, разделяющие все, кроме одного столбца). –