Curso
Un array es una estructura de datos capaz de almacenar datos multidimensionales. En R, un array es un objeto que puede contener datos de dos o más dimensiones. Por ejemplo, en matrices cuadradas puedes tener dos filas y dos columnas, y la dimensión puede llegar a cinco. Los arrays solo almacenan valores de un mismo tipo de dato. Los datos pueden tener más de una dimensión, con filas, columnas y dimensiones de cierta longitud.
Creación de un array
La función array() crea un array a partir de un vector (los números) y las dimensiones ("dim") indicadas como argumento.
Veamos un ejemplo donde se crean dos vectores llamados "array1" y "array2".
vector1 = c (5, 10, 15,20)
vector2 = c (25, 30, 35, 40, 45, 50,55,60)
Puedes usar los dos vectores anteriores como entrada de un array con dimensión 4 * 4; así se crean dos matrices o datos bidimensionales.
final = array (c (array1, array2),dim =c(4,4,3))
print (final)
La salida del código anterior es la siguiente:
, , 1
[,1] [,2] [,3] [,4]
[1,] 5 25 45 5
[2,] 10 30 50 10
[3,] 15 35 55 15
[4,] 20 40 60 20
, , 2
[,1] [,2] [,3] [,4]
[1,] 25 45 5 25
[2,] 30 50 10 30
[3,] 35 55 15 35
[4,] 40 60 20 40
, , 3
[,1] [,2] [,3] [,4]
[1,] 45 5 25 45
[2,] 50 10 30 50
[3,] 55 15 35 55
[4,] 60 20 40 60
Vamos a renombrar nuestro array como "Arr1" y "Arr2" usando "matrix.names". Además, cambiaremos los nombres de filas a ("row1","row2") y los de columnas a ("column1","column2","column3"). La dimensión de la matriz es de 2 filas y 3 columnas.
array1 = c (9 , 18 )
array2 = c (27,36)
r.names = c ("column1","column2","column3")
c.names = c ("row1","row2")
m.names = c ("Arr1", "Arr2")
final = array (c (array1,array2), dim=c (2,3,2), dimnames=list (c.names, r.names, m.names))
print(final)
La salida del código anterior muestra dos filas y tres columnas. Además, el valor de la columna se repite cuando se agota:
, , Arr1
column1 column2 column3
row1 9 27 9
row2 18 36 18
, , Arr2
column1 column2 column3
row1 27 9 27
row2 36 18 36
Indexación en un array
Un array contiene elementos en varias dimensiones y cada elemento puede accederse para operar con él. Los elementos se indexan con "[]"; en un array tipo matriz con filas y columnas, se indexa como: mat[row, column]
Tomemos un ejemplo en el que el array contiene un vector de entrada del 1 al 9. Hay solo tres filas y tres columnas, e incluye los valores del 1 al 9. "c.names" es el nuevo nombre de columnas con los valores ('c1', 'c2', 'c3') y 'r.names' son los nuevos nombres de filas ('r1', 'r2', 'r3'), también un vector.
a1= c (1,2,3,4)
a2= c (5,6,7,8,9)
r.names = c ("c1","c2","c3")
c.names = c ("r1","r2","r3")
m.names = c ("first")
arr = array (c (a1,a2), dim=c (3,3,1), dimnames=list (c.names, r.names, m.names))
print(arr)
, , first
c1 c2 c3
r1 1 4 7
r2 2 5 8
r3 3 6 9
La salida del código anterior es:
, , first
c1 c2 c3
r1 1 4 7
r2 2 5 8
r3 3 6 9
Puedes ver que se generan las matrices del 1 al 9 con dimensión 3 × 3 (fila × columna) y que han cambiado los nombres de filas y columnas.
Veamos cómo extraer elementos del array con los siguientes ejemplos.
- Extraer el número "7" del array "arr" anterior.
arr[1,3,1]
7
La salida del código anterior es 7. En "arr[1,3,1]" se extrae la fila 1, columna 3, y el 1 indica la primera capa del array "arr".
- Para acceder al 1, "arr[1,1,1]": fila 1, columna 1, en la primera capa del array "arr".
arr[1,1,1]
1
La salida del código anterior es 1.
- Para acceder a varios valores a la vez, especifica el rango que quieres.
arr[1:2,1:2,1]
| c1 | c2 | |
|---|---|---|
| r1 | 1 | 4 |
| r2 | 2 | 5 |
El código anterior devuelve la siguiente salida: valores en 2 filas, 2 columnas y la primera capa del array "arr".
c1 c2
r1 1 4
r2 2 5
- Puedes acceder a toda la matriz "arr" con la siguiente sintaxis: "arr[ , ,1]" indica incluir todas las filas y columnas (separadas por comas y espacios). El 1 indica la capa del array "arr" a extraer.
arr[ , ,1]
| c1 | c2 | c3 | |
|---|---|---|---|
| r1 | 1 | 4 | 7 |
| r2 | 2 | 5 | 8 |
| r3 | 3 | 6 | 9 |
El código anterior devuelve la siguiente salida con todos los elementos:
c1 c2 c3
r1 1 4 7
r2 2 5 8
r3 3 6 9
- Puedes obtener la segunda fila completa con el siguiente código. En arr[2, ,1] se extrae la segunda fila (espacio para todas las columnas) y 1 indica la capa del array.
arr[2,,1]
- c1
- 2
- c2
- 5
- c3
- 8
El código anterior devuelve la siguiente salida e imprime c1, c2 y c3.
c1 2
c2 5
c3 8
- Puedes obtener la segunda columna completa con el siguiente código. En arr[,2,1], el espacio con 2 indica la segunda columna, y 1 es la capa a extraer.
mat[ ,2,1]
- r1
- 4
- r2
- 5
- r3
- 6
El código anterior devuelve la siguiente salida e imprime r1, r2 y r3.
r1 4
r2 5
r3 6
Creación y suma de matrices
Vamos a crear dos matrices llamadas mat1 y mat2 a partir de 'arr[ , ,1]', copiando todas las filas y columnas de 'arr'.
mat1 = arr[,,1]
mat2 = arr[,,1]
c1 c2 c3
r1 2 8 14
r2 4 10 16
r3 6 12 18
Suma las dos matrices 'mat1' y 'mat2' y guarda el resultado en final. También se imprime la salida.
final <- mat1+mat2
print(final)
La salida muestra que cada fila y columna de mat1 y mat2 se suman elemento a elemento.
c1 c2 c3
r1 2 8 14
r2 4 10 16
r3 6 12 18
apply()
apply() forma parte de los paquetes de R y reúne varias funciones que te ayudan a escribir código de forma más sencilla y eficiente. A continuación verás un ejemplo para calcular la suma de dos matrices.
La sintaxis de apply() es:apply(x, margin, function)
Los argumentos indican lo siguiente:
x: un array o datos bidimensionales como matrices.
margin: indica dónde aplicar la función: c(1) para filas, c(2) para columnas y c(1,2) para filas y columnas.
function: función integrada de R o definida por el usuario que se aplicará sobre los datos.
Creemos un vector llamado 'array1' de longitud tres y 'array2' de longitud seis con el siguiente código.
array1 = c(5,10,15)
array2 = c(15,20,25,30,35,40)
A continuación, array() acepta los dos vectores 'array1' y 'array2' con una dimensión de 3 filas, 3 columnas y crea 2 matrices que se guardan en 'my. Array'.
my.Array <- array(c(array1,array2),dim = c(3,3,2))
print(my.Array)
, , 1
[,1] [,2] [,3]
[1,] 5 15 30
[2,] 10 20 35
[3,] 15 25 40
, , 2
[,1] [,2] [,3]
[1,] 5 15 30
[2,] 10 20 35
[3,] 15 25 40
El código anterior genera la siguiente salida: se crean dos matrices de 3 × 3 (filas × columnas).
, , 1
[,1] [,2] [,3]
[1,] 5 15 30
[2,] 10 20 35
[3,] 15 25 40
, , 2
[,1] [,2] [,3]
[1,] 5 15 30
[2,] 10 20 35
[3,] 15 25 40
A continuación, apply() se usa para calcular la suma de las dos matrices por columnas.
final <- apply(my.Array, c(2), sum)
print(final)
[1] 60 120 210
Como ves, se usa c(2) como margen y se suman los elementos por columnas en "my. Array" para obtener el siguiente resultado.
60 120 210
Por último, apply() se usa para calcular la suma de las dos matrices por filas.
final <- apply(my.Array, c(1), sum)
print(final)
[1] 100 130 160
De nuevo, con c(1) como margen se suman los elementos por filas en "my. Array" para obtener el siguiente resultado.
100 130 160
¡Enhorabuena!
¡Has llegado al final de este tutorial!
Has aprendido qué es un array en R, cómo crearlo e indexarlo con ejemplos, además de cómo crear y sumar matrices y usar la función apply().
Si quieres seguir aprendiendo R, haz el curso de DataCamp Introduction to R.
Referencias:
R-Arrays
R Array Function and Create Array in R
