Los corchetes simples y dobles se utilizan como operadores de indexación en el lenguaje de programación R. Ambos operadores se utilizan para hacer referencia a los componentes de los objetos de almacenamiento de R, ya sea como un subconjunto que pertenece al mismo tipo de datos o como un elemento.
La tabla ilustra algunas diferencias clave entre ambos tipos de operadores:
[] |
[[]] |
---|---|
Se utiliza para la indexación singular | Se utiliza para la indexación recursiva |
Lista de acceso dentro de una lista | Acceder a elementos dentro de una lista |
Puede o no devolver un solo elemento de la lista | Siempre devuelve un solo elemento de la lista. |
Permite indexar por vectores | Permite la indexación por números enteros o caracteres |
Ejemplo 1: Acceder a los elementos de las listas singulares
Las listas singulares contienen un solo nivel de indexación para los elementos. Al aplicar cualquiera de los operadores de paréntesis, se devuelven los elementos en la posición de índice especificada de la lista. En el caso de corchetes dobles, se obtiene el mismo resultado, porque la lista en el j-ésimo índice especificado también consta de ese elemento en particular. Por lo tanto, el tipo de soportes se puede usar indistintamente. La única diferencia aquí es que, en caso de que especifiquemos un índice que sea mayor que la longitud de la lista, los corchetes singulares devolverán NA, porque falta el valor. Sin embargo, los corchetes dobles intentan acceder a la lista presente en este índice faltante y, por lo tanto, arrojan un error.
R
# declaring a numeric vector vec <- c(1:10) print ("Original Vector") print (vec) # using single bracket print ("Singular brackets") print(vec[5]) # using dual bracket print ("Double brackets") print (vec[[5]])
Producción:
[1] "Original Vector" [1] 1 2 3 4 5 6 7 8 9 10 [1] "Singular brackets" [1] 5 [1] "Double brackets" [1] 5
Ejemplo 2: Acceder a los elementos de las listas anidadas
Las listas anidadas contienen listas y otros objetos (ya sean vectores) como sus elementos. La recuperación en las listas anidadas se realiza en base a la indexación múltiple y recursiva. La cantidad de subíndices de índice utilizados como referencia depende de la cantidad de niveles que explorar para acceder al elemento. Se puede acceder al elemento en el índice usando corchetes dobles y se puede acceder al subconjunto de listas usando corchetes simples.
R
# declaring a nested list nested_list <- list(list(letters[1:8],"secondele"), 5:15, FALSE) print("Original list") print(nested_list) print ("Accessing first sub-list of the list") print(nested_list[1]) print ("Accessing first component of the list") print(nested_list[[1]]) print ("Accessing components inside component of the list") print(nested_list[[1]][[2]])
Producción:
[1] "Original list" [[1]] [[1]][[1]] [1] "a" "b" "c" "d" "e" "f" "g" "h" [[1]][[2]] [1] "secondele" [[2]] [1] 5 6 7 8 9 10 11 12 13 14 15 [[3]] [1] FALSE [1] "Accessing first sub-list of the list" [[1]] [[1]][[1]] [1] "a" "b" "c" "d" "e" "f" "g" "h" [[1]][[2]] [1] "secondele" [1] "Accessing first component of the list" [[1]] [1] "a" "b" "c" "d" "e" "f" "g" "h" [[2]] [1] "secondele" [1] "Accessing components inside component of the list" [1] "secondele"
Ejemplo 3: Accediendo a los elementos de los vectores o arreglos
En el caso de arrays unidimensionales, no hay grandes diferencias en el funcionamiento de ambos operadores. Ambos operadores intentan devolver el elemento presente en el índice especificado de la array. Sin embargo, al igual que las listas singulares, en caso de que se acceda a cualquier elemento fuera del rango, en caso de paréntesis singulares, se devuelve NA, mientras que los corchetes dobles arrojan una excepción de subíndice fuera de los límites, al finalizar la ejecución.
R
# declaring a numeric vector arr <- 1:15 print ("Original Vector") print (arr) print ("Singular brackets") print(arr[8]) print ("Double brackets") print(arr[[8]])
Producción
[1] "Original Vector" [1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 [1] "Singular brackets" [1] 10 [1] "Singular brackets" [1] 10
Ejemplo 4: Acceder a los elementos de los marcos de datos
Los corchetes individuales en un marco de datos se utilizan para acceder a un subconjunto del marco de datos, es decir, solo se accede a un sub-marco de datos. La columna correspondiente al índice especificado y todas las filas se devuelven como salida. En el caso de corchetes dobles en un marco de datos, la misma salida se devuelve en forma de vector de elementos.
R
# declaring a dataframe data_frame <- data.frame(col1=letters[1:6], col2 = c(7:12), col3 = c(1:6)) print ("Original dataframe") print (data_frame) print ("Sub dataframe") print (data_frame[2]) print ("Element dataframe") print (data_frame[[2]])
Producción:
[1] "Original dataframe" col1 col2 col3 1 a 7 1 2 b 8 2 3 c 9 3 4 d 10 4 5 e 11 5 6 f 12 6 [1] "Sub dataframe" col2 1 7 2 8 3 9 4 10 5 11 6 12 [1] "Element dataframe" [1] 7 8 9 10 11 12