Pensé que R tenía una sobrecarga estándar para almacenar objetos (24 bytes, al parecer, al menos para vectores enteros), pero una simple prueba reveló que es más complejo de lo que creía. Por ejemplo, teniendo los vectores enteros hasta longitud 100 (mediante muestreo aleatorio, con la esperanza de evitar cualquier sneaky sequence compression tricks that might be out there), I encontrado que los diferentes vectores de longitud podrían tener el mismo tamaño, de la siguiente manera:Tamaños de vectores enteros en 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
Estoy muy impresionado por los valores 152
que se muestran (observación: 152 = 128 + 24, aunque 280 = 256 + 24 no es tan prominente). ¿Alguien puede explicar cómo surgen estas asignaciones? No he podido encontrar una definición clara en la documentación, aunque aparecen celdas V.
Esto podría ser un artefacto de la implementación de 'object.size'. Observe cómo la ayuda lo describe como una estimación ... –
@Nick: Oh no, eso es un poco espeluznante, porque dependo mucho de 'object.size()'. Gracias por el puntero. A medida que leo, surge la incertidumbre debido a posibles problemas de atribución (o incluso codificación). Pero no hay mucho más simple en la vida que los vectores enteros. – Iterator
Estoy de acuerdo, aunque debe tener cuidado de todos modos ya que la reutilización a menudo está oculta (basta con mirar el objeto.tamaño de dos enormes marcos de datos compartiendo todos menos 1 columna) –