Partiremos de lo básico para que el lector se familiarice con la notación y la funcionalidad de R. De acuerdo con la sección anterior, asumiremos que R ya esta instalado. En la línea de comando de R, aparecerá el prompt, que es donde ingresaremos las siguientes instrucciones.
>
En analogía con herramientas, sumar en R es como clavar un alfiler con un mazo; esta operación elemental se hace con lo siguiente:
> 1+1
Al presionar la tecla de enter, se desplegará lo siguiente
[1] 2
lo que indica que el resultado con valor 2 se encuentra en la primera línea (símbolo [1]). Un comando muy útil es q (), con este comando aparecerá una ventana preguntando si queremos guardar nuestra sesión.
> q()
Vectores
Si n es un entero positivo,
denota la colección de todas las listas de n números reales, estos se pueden escribir como una fila, pero generalmente se escriben como matrices de columnas de tamaño n x 1. En álgebra lineal, esta colección de listas se conoce como vector.
Ejemplo:
Vector columna
Vector renglón
La función c() se utiliza para coleccionar cosas en un vector.
x <- c(0,1,2)
El operador : es usado para crear secuencias de valores crecientes (decrecientes).
> 1:100
El resultado es:
[1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 [15] 15 16 17 18 19 20 21 22 23 24 25 26 27 28 [29] 29 30 31 32 33 34 35 36 37 38 39 40 41 42 [43] 44 45 46 47 48 49 50 51 52 53 54 55 56 57 [58] 58 59 60 61 62 63 64 65 66 67 68 69 70 71 [72] 72 73 74 75 76 77 78 79 80 81 82 83 84 85 [86] 86 87 88 89 90 91 92 93 94 95 96 97 98 99 [100] 100
El cuadrado de cada elemento en la secuencia se puede calcular de la siguiente manera
> (1:100)^2
Resulta en
[1]1 4 9162536496481
[10] 100 121 144 169 196 225 256 289 324
[19] 361 400 441 484 529 576 625 676 729
[28] 784 841 900 961 1024 1089 1156 1225 1296
[37] 1369 1444 1521 1600 1681 1764 1849 1936 2025
[46] 2116 2209 2304 2401 2500 2601 2704 2809 2916
[55] 3025 3136 3249 3364 3481 3600 3721 3844 3969
[64] 4096 4225 4356 4489 4624 4761 4900 5041 5184
[73] 5329 5476 5625 5776 5929 6084 6241 6400 6561
[82] 6724 6889 7056 7225 7396 7569 7744 7921 8100
[91] 8281 8464 8649 8836 9025 9216 9409 9604 9801
[100] 10000
Si tenemos una secuencia de datos extensa, a menudo es conveniente ubicar valores de información fundamental. El valor máximo, el valor mínimo o incluso la suma son funciones que R proporciona como herramientas de análisis de datos. El siguiente ejemplo ilustra este hecho:
> sum((1:100)) [1] 5050 > max((1:100)) [1] 100
> min((1:100)) [1] 1
Para la sucesión de cuadrados se realiza de forma análoga.
> sum((1:100)^2)
[1] 338350
> max((1:100)^2)
[1] 10000
> min((1:100)^2)
[1] 1
Los vectores pueden ser concatenados con la función c.
> CON <- c(x,10:-10)
[1] 0 1 2 10 9 8 7 6 5 4 3 2 1 0 -1 -2 -3 -4
[19] -5 -6 -7 -8 -9 -10
Una forma de extraer un elemento, es usar corchetes
> CON[17]
[1] -3
> CON[c(4,5)]
[1] 10 9
> CON[4:10]
[1] 10 9 8 7 6 5 4
Los índices negativos se pueden utilizar para evitar ciertos elementos.
> CON[-4]
[1] 0 1 2 9 8 7 6 5 4 3 2 1 0 -1 -2 -3 -4 -5
[19] -6 -7 -8 -9 -10
No se puede mezclar índices positivos y negativos
> CON[c(-4,5)]
Error in CON[c(-4, 5)] : only 0's may be mixed with negative subscripts
La construcción de patrón de vectores se pueden hacer usando las funciones seq(), así como la función rep().
> seq(1,21,2)
[1] 1 3 5 7 9 11 13 15 17 19 21
> seq(21,-21,-2)
[1] 21 19 17 15 13 11 9 7 5 3 1 -1 -3 -5 -7 -9 -11 -13
[19] -15 -17 -19 -21
Si queremos encontrar patrones repetidos, podemos utilizar rep().
> rep(70,7)
[1] 70 70 70 70 70 70 70
Esta función puede tener más opciones
> rep(seq(1,21, by = 3), 2)
[1] 1 4 7 10 13 16 19 1 4 7 10 13 16 19
> rep(1:4, 2)
[1] 1 2 3 4 1 2 3 4
> rep(1:4, each = 2)
[1] 1 1 2 2 3 3 4 4
> rep(1:4, each = 3)
[1] 1 1 1 2 2 2 3 3 3 4 4 4
> rep(1:4, c(2,2,2,2))
[1] 1 1 2 2 3 3 4 4
> rep(1:4, c(2,3,7,3))
[1] 1 1 2 2 2 3 3 3 3 3 3 3 4 4 4
> rep(1:4, each = 2, len = 4) # first 4 only.
[1] 1 1 2 2
> rep(1:4, each = 2, len = 7)
[1] 1 1 2 2 3 3 4
> rep(1:4, each = 2, times = 3) # length 24, 3 complete replications
[1] 1 1 2 2 3 3 4 4 1 1 2 2 3 3 4 4 1 1 2 2 3 3 4 4
Valores que no son números NaN
> x <- 0:10
> x
[1] 0 1 2 3 4 5 6 7 8 9 10
> x/x
[1] NaN 1 1 1 1 1 1 1 1 1 1
> 1/x
[1] Inf 1.0000000 0.5000000 0.3333333 0.2500000 0.2000000 0.1666667
[8] 0.1428571 0.1250000 0.1111111 0.1000000
Matrices
Una matriz de tamaño m x n es un arreglo rectangular de números con m filas y n columnas.
Ejemplo:
Una matriz con m=3 renglones y n=4 columnas tiene la siguiente forma:
La función de matriz matrix () se puede utilizar para crear una matriz rectangular de números. Antes de usar la función matrix (), podemos aprender más, solicitando ayuda en R con la instrucción ?funcname, o help(funcname), esto es:
> ?matrix
>help(matrix)
Ejemplo:
Una matriz de 2 x 2 se ingresa
> x=matrix(data=c(1,2,3,4),nrow=2,ncol=2)
> x
[,1] [,2]
[1,] 1 3
[2,] 2 4
Se puede omitir data=, nrow= y ncol= del ejemplo anterior, de tal forma que la instrucción más corta puede ser:
> x=matrix(c(1,2,3,4),2,2)
>x
[,1] [,2]
[1,] 1 3
[2,] 2 4
> matrix(c(1,2,3,4),2,2,byrow=TRUE)
[,1] [,2]
[1,] 1 2
[2,] 3 4
> matrix(c(1,2,3,4),2,2,byrow=FALSE)
[,1] [,2]
[1,] 1 3
[2,] 2 4
> matrix(1:10, nrow = 2, ncol = 5, byrow = TRUE)
[,1] [,2] [,3] [,4] [,5]
[1,] 1 2 3 4 5
[2,] 6 7 8 9 10
Si asignamos el objeto A a la matriz de 2 x 2, podemos realizar varias operaciones que afectan cada entrada de la matriz, por ejemplo:
> A=matrix(c(1,2,3,4),2,2,byrow=TRUE) >A
[,1] [,2]
[1,] 1 2
[2,] 3 4
> sqrt(A)
[,1] [,2]
[1,] 1.000000 1.414214
[2,] 1.732051 2.000000
> A^2
[,1] [,2]
[1,] 1 4
[2,] 9 16
Los elementos de un vector están ordenados por columnas, como en el siguiente ejemplo.
> matrix(1:10, nrow = 2, ncol = 5)
[,1] [,2] [,3] [,4] [,5]
[1,] 1 3 5 7 9
[2,] 2 4 6 8 10
En la siguiente construcción, R recicla datos, si el vector no es lo suficientemente grande para llenar una matriz, la matriz se llena con los mismos datos, de la siguiente manera
> matrix(1:3, nrow = 2, ncol = 3)
[,1] [,2] [,3]
[1,] 1 3 2
[2,] 2 1 3
Para hallar la dimension de una matriz usamos las funciones dim, nrow o ncol
> A <- matrix(1:25, nrow = 5, ncol = 5)
> dim(A)
[1] 5 5
> nrow(A)
[1] 5
> ncol(A)
[1] 5
Para accesar a elementos de una matriz usamos las siguientes instrucciones:
> A[1,1]
[1] 1
> A[1,2]
[1] 6
> A[2,5]
[1] 22
> A[5,5]
[1] 25
> A[5,7]
Error in A[5, 7] : subscript out of bounds
En el último índice, R arroja un mensaje de error porque la dimensión de la matriz no contiene el elemento A [5,7]; simplemente no existe en la memoria.
Las filas y columnas pueden tener nombres, esto se ilustra a continuación con nuestra matriz A
> rownames(A) <- c("one", "two", "three", "four", "five")
> colnames(A) <- c("one", "two", "three", "four", "five")
>A
one two three four five
one 1 6 11 16 21
two 2 7 12 17 22
three 3 8 13 18 23
four 4 9 14 19 24
five 5 10 15 20 25
Los elementos se pueden seleccionar por el nombre de su fila y columna; Además, podemos llamar a una fila y una columna específicamente
> A["three","three"]
[1] 13
> A[3,]
one two three four five
3 8 13 18 23
> A[,4]
one two three four five
16 17 18 19 20
También podemos modificar elementos de una matriz
> A[c(1, 2), c(1, 3, 4)] <- 0
>A
one two three four five
one 0 6 0 0 21
two 0 7 0 0 22
three 3 8 13 18 23
four 4 9 14 19 24
five 5 10 15 20 25
> A[c(1, 2), c(1, 3, 4)] <- c(-1, -2, -3)
>A
También podemos realizar operaciones de suma y multiplicación de matrices
> v1 <- seq(1, 7, by = 2)
> B <- matrix(v1, nrow = 2)
> v2 <- seq(0, 6, by = 2)
> C <- matrix(v2, nrow = 2)
Ahora
> B + C # Adds element by element.
[,1] [,2]
[1,] 1 9
[2,] 5 13
> B * C # Multiplication element by element
[,1] [,2]
[1,] 0 20
[2,] 6 42
> B %*% C # Multiplication by rows and columns
[,1] [,2]
[1,] 10 34
[2,] 14 54
En el ejemplo anterior usamos la función seq () para generar una secuencia de números del 1 al 7. Otra forma de definir una matriz es usando la función cbind(), en el siguiente ejemplo definimos una matriz de 3 x 3 de esta manera;
> c1 = c(1,1,6)
> c2 = c(-1,0,-2)
> c3 = c(0,-1,-3)
> A = cbind(c1,c2,c3) # We join by columns
>A
c1 c2 c3
[1,] 1 -1 0
[2,] 1 0 -1
[3,] 6 -2 -3
La función diag() extrae la diagonal de una matriz
> diag(A)
[1] 1 0 -3
Por otro lado las funciones t() y det() calculan la traspuesta y el determinante de una matriz, respectivamente.
> t(A)
[,1] [,2] [,3]
c1 1 1 6
c2 -1 0 -2
c3 0 -1 -3
> det(A)
[1] 1
Dado que el determinante de la matriz A es distinto de cero, A tiene un rango completo y podemos calcular su inversa. La inversa A^{-1}, de la matriz A, es tal que A^{-1} A= I = AA^{-1}, donde I es la matriz identidad. Las matrices A^{-1}, I son matrices cuadradas del mismo tamaño. En el siguiente ejemplo, calculamos la inversa de la matriz A, con la función solve (). Como la matriz A es 3x3, definimos I con la función diag ();
> I=diag(1,nrow=3)
> A_inv=solve(A,I)
> A%*%A_inv
[,1] [,2] [,3]
[1,] 1.000000e+00 4.440892e-16 0
[2,] -2.220446e-16 1.000000e+00 0
[3,] -8.881784e-16 1.776357e-15 1
> A_inv%*%A
c1 c2 c3
c1 1 0.000000e+00 -4.440892e-16
c2 0 1.000000e+00 0.000000e+00
c3 0 -2.220446e-16 1.000000e+00
Podemos calcular la matriz inversa de A, sin utilizar la matriz identidad I.
> invA=solve(A)
> invA%*%A
> A%*%invA
> invA
> A_inv
Para resolver un sistema de ecuaciones lineales en R, podemos usar las funciones estudiadas.
Por ejemplo, para resolver el sistema de ecuaciones lineales
,
empleamos los siguiente
> a1<-c(4,3)
> a2<-c(-2,-5)
> S=cbind(a1,a2)
>S
a1 a2
[1,] 4 -2
[2,] 3 -5
Ahora definimos el vector b con cbind (), y usamos la función solve () para calcular la inversa de la matriz S. Finalmente, la solución del sistema es x = 2, y = 1.
> b=cbind(c(10,11))
> Solucion=solve(S)%*%b
> Solucion
[,1]
a1 2
a2 -1
To calculate the eigenvalues and eigenvectors, we use the function eigen(). For example
> eigen(A)
> eigen(B)
> eigen(S)