9  TAMAÑO Y DIMENSIONES DE UN OBJETO

9.1 Tamaño

El tamaño de un objeto se determina mediante la función length.

Cuando el argumento es un objeto atómico (vector, matriz o arreglo; cf. capítulo 8), la función length da como resultado el número de elementos del objeto.

Al usar la función lenght 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 la función length 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.

Tip 9.1: ¿¡Que los data frames son listas!?

Para verificar que un data frame también es una lista, se usa la función is.list.

Considérese, por ejemplo, el data frame df2 que se construyó en la sección 8.4:

is.list(df2)
[1] TRUE
Advertencia 9.1: ¿Y de qué tamaño son los escalares?

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 (cf. capítulo 8).

Así, la función dim aplicada a una matriz informará su número de filas y de columnas.

¡No aplica!

La función dim 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, pueden usarse las funciones nrow para obtener el número de filas, y ncol para el número de columnas de contenedores rectangulares (data frames y matrices).

Cuando se aplican las funciones nrow y ncol sobre un arreglo, informan sobre el tamaño de la primera y la segunda dimensión, respectivamente.

En resumen…

Aunque existen 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. Use length para conocer el tamaño o número de elementos de los contenedores unidimensionales, esto es, vectores y listas

  2. Use nrow y ncol para el número de filas y columnas, respectivamente, en contenedores bidimensionales, esto es, en data frames y matrices

  3. Use 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 un vector en R tiene un número de elementos menor que el requerido, se hace una reutilización cíclica de los elementos disponibles. A esto se le denomina reciclaje de elementos.

Así, cuando se intenta, por ejemplo, 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), así:

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

Contrástese este resultado con el siguiente:

c <- c(2, 4)
d <- c(3, 5, 0, 1)
c + d
[1] 5 9 2 5

Nótese que el mensaje de advertencia solo aparece cuando el tamaño del objeto mayor no es múltiplo del tamaño del objeto menor. En contraste, cuando el tamaño del vector mayor es múltiplo del tamaño del vector menor, el proceso se realiza de manera silenciosa.

Más allá de este mensaje, la operación —realizando el reciclado necesario— se realiza en ambos casos.

Un caso particular de reciclaje se da cuando —en términos del álgebra matricial— se realiza una operación entre un “escalar” y un vector. Recuérdese, sin embargo, que en R no existe el concepto de escalar, tratándose realmente de vectores de tamaño 1 (cf. advertencia 9.1). En estos casos el único elemento de dicho vector se repite cuantas veces sea necesario para ajustarse al tamaño del mayor vector, tal y como se ilustra a continuación.

lambda <- 5
b      <- c(1, 2, 3, 4, 5)
lambda * b
[1]  5 10 15 20 25
En argumentos de funciones

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.