is.list(df2)
[1] TRUE
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.
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
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.
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.
La función dim
no es aplicable a objetos unidimensionales, es decir, vectores y listas.
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.
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:
Use length
para conocer el tamaño o número de elementos de los contenedores unidimensionales, esto es, vectores y listas
Use nrow
y ncol
para el número de filas y columnas, respectivamente, en contenedores bidimensionales, esto es, en data frames y matrices
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.
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:
<- c(1, 3)
a <- c(1, 2, 3, 4, 5) b
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í:
+ b a
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(2, 4)
c <- c(3, 5, 0, 1)
d + d c
[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.
<- 5
lambda <- c(1, 2, 3, 4, 5)
b * b lambda
[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.