9 TAMAÑO Y DIMENSIONES DE UN OBJETO

9.1 Tamaño

Se obtiene mediante la función length. Cuando el argumento es un objeto atómico (vector, matriz o arreglo; cf. capítulo 8), da como resultado el número de elementos del objeto. Al usarla con una lista como argumento, el resultado se refiere al número de elementos de mayor jerarquía, sin contabilizar los objetos anidados dentro de cada uno de estos. Cuando se utiliza con un data frame como argumento, el resultado es el número de columnas. Esto se debe a que los data frames también son considerados listas, siendo cada una de sus columnas los elementos constituyentes de mayor jerarquía. Esto puede verificarse al aplicar la función is.list sobre un data frame.

Es importante aclarar que en R no existe el concepto de escalar o de carácter individual. Cualquier número, ya sea real o complejo, y también cualquier cadena de caracteres es un vector de tamaño 1.

9.2 Dimensiones

Mediante la función dim se obtiene el número de elementos dimensionales de un contenedor multidimensional, esto es, de una matriz, un arreglo o un data frame. Así, la función dim aplicada a una matriz informará su número de filas y de columnas. Esta función no es aplicable a objetos unidimensionales, es decir, vectores y listas.

9.3 Filas y columnas

En lugar de la función dim, que genera un vector con tantos elementos como dimensiones tenga su argumento, puede usarse la función nrow para obtener el número de filas, y ncol para el número de columnas de un contenedor rectangular (data frames y matrices). Cuando se aplican estas funciones sobre un arreglo, informan sobre el tamaño de la primera y la segunda dimensión, respectivamente.

En resumen, obviando diversas variantes que permiten obtener información sobre el tamaño de los contenedores, desde el punto de vista nemotécnico se recomiendan los siguientes usos: 1) length para conocer el tamaño o número de elementos de los contenedores unidimensionales, esto es, vectores y listas, 2) nrow y ncol para el número de filas y columnas, respectivamente, en contenedores bidimensionales, esto es, en data frames y matrices, y 3) dim para conocer, con una única instrucción, el tamaño (número de dimensiones y número de elementos en cada una de ellas) de cualquier arreglo multidimensional, esto es, data frames, matrices o arreglos.

9.4 Reciclaje de elementos

Cuando se intenta realizar una operación entre vectores de diferente tamaño, los elementos del vector de menor tamaño se repiten cíclicamente (se reciclan) hasta que ambos vectores se igualen en tamaño.

Considérense los siguientes vectores

a <- c(1, 3)
b <- c(1, 2, 3, 4, 5)

Para sumar los vectores a y b, se requeriría que estos fueran del mismo tamaño. Por tanto, si se solicita la operación a + b, los dos elementos del vector a se repetirán cíclicamente hasta dar lugar a un vector de tamaño 5, así:

a.reciclado <- c(1, 3, 1, 3, 1)

Luego, cuando se solicita la operación a + b, se suman los vectores c(1, 3, 1, 3, 1) y c(1, 2, 3, 4, 5), obteniéndose el siguiente resultado.

#> Warning in a + b: longitud de objeto mayor no es múltiplo de la longitud de uno
#> menor
#> [1] 2 5 4 7 6

Si el tamaño del vector mayor es múltiplo del tamaño del vector menor, el proceso se realiza de manera silenciosa; de no ser así, aparece un mensaje de advertencia, indicando que el tamaño del objeto mayor no es múltiplo del tamaño del objeto menor; sin embargo, la operación también se realiza.

Un caso particular de reciclaje se da cuando se realiza una operación entre un ‘escalar’ y un vector. Tal y como se ha indicado anteriormente, en R no existe el concepto de escalar, tratándose realmente de vectores de tamaño 1. En estos casos el único elemento de dicho vector se repite cuantas veces sea necesario para ajustarse al tamaño del mayor vector.

lambda <- 5
b      <- c(1, 2, 3, 4, 5)
lambda * b
#> [1]  5 10 15 20 25

Otro caso de reciclaje surge cuando se usa un vector como argumento de una función. Si el tamaño de dicho vector es menor que el requerido, los elementos suministrados se reciclan para generar un vector del tamaño necesario.