Arrays y matrices

Recuerda que un array es una colección de datos del mismo tipo con varias dimensiones. Observa el siguiente ejemplo en el que se crea un array de dimensiones 3x4x2.

a <- 1:24
dim(a) <- c(3, 4, 2)
a

Una matrix es un array con dos dimensiones. Tienen una funcionalidad muy parecida, pero matrix es más 'cómoda'.

a1 <- array(9, dim = c(5, 4))
a2 <- matrix(1:20, nrow = 5)  # como en FORTRAN
a3 <- matrix(1:20, nrow = 5, byrow = TRUE)
a4 <- 1:20
dim(a4) <- c(5, 4)

Con las coordenadas se obtienen los elementos particulares, como en los vectores:

a[1, 1, 1]
a[1, 1, 2]
a[3, 4, 2]

También podemos considerar subconjuntos de un array

a[2, , ]  # es un array de dimensión c(4,2)
a4[1, ]
a4[, 2]
a4[c(1, 3), c(2, 4)]

y también se pueden dar las coordenadas matricialmente, por ejemplo:

im <- matrix(c(1, 3, 2, 4), nrow = 2)
im
a4[im]

Ejemplo 1. Explicitar los nombres de las filas y columnas.

x <- c(190, 8, 22, 191, 4, 1.7, 223, 80, 2, 210, 50, 3)
datos <- matrix(x, nrow = 4, byrow = T)
dim(datos)
ciudades <- c("Barna", "Tarraco", "Lleida", "Girona")
dimnames(datos) <- list(ciudades, NULL)
variables <- c("A", "B", "C")
dimnames(datos) <- list(ciudades, variables)
datos
dimnames(datos)
datos["Barna", ]
datos[, "C"]

Ejemplo 2. Ordenación por columnas.

a4 <- 1:20
dim(a4) <- c(5, 4)
attributes(a4)
colnames(a4) <- paste("v", 1:4, sep = "")
rownames(a4) <- paste("id", 1:5, sep = ".")
a4[, c("v1", "v3")]
attributes(a4)
matriz <- matrix(rnorm(20), ncol = 4)
o.matriz <- matriz[order(matriz[, 1]), ]

Nota. Operaciones con matrices

data(longley)
Cl <- cor(longley)
## Graphical Correlation Matrix:
symnum(Cl)  # highly correlated

## Spearman's rho
cor(apply(longley, 2, rank))
cor(longley, method = "spearman")  # mejor

La función outer(X, Y, FUN="*", ...) proporciona de forma predifinda el producto exterior de los dos arrays. Sin embargo, podemos introducir otras funciones e incluso nuestras propias funciones.

x <- 1:9
names(x) <- x
# Multiplication & Power Tables
x %o% x
y <- 2:8
names(y) <- paste(y, ":", sep = "")
outer(y, x, "^")

Ejemplo 3. Combinación de arrays

Para combinar vectores, matrices o arrays utilizamos las instrucciones rbind y cbind.

x1 <- 1:10
x2 <- 11:20
a6 <- diag(6)  # matriz identidad
a7 <- cbind(x1, x2)
a8 <- rbind(x1, x2)
a24 <- cbind(a2, a4)

cbind(a4, a6)  # no funciona
rbind(a4, a6)  # no funciona

a9 <- matrix(rnorm(30), nrow = 5)

cbind(a4, a9)
rbind(a4, a9)  # no funciona