En este laboratorio, introduciremos algunos comandos R simples. La mejor manera de aprender un nuevo lenguaje es probando los comandos. R y RStudio pueden ser descargados de
R utiliza funciones para realizar operaciones. Para ejecutar una función llamada funcname, escribimos funcname(input1, input2), donde las entradas (o argumentos) input1 y input2 le dicen a R cómo ejecutar la función. Una función puede tener cualquier número de entradas. Por ejemplo, para crear un vector de números, usamos la función c() (para concatenar). Cualquier número dentro de los paréntesis se unen entre sí. El siguiente comando instruye a R para que junte los números 1, 3, 2 y 5, y los guarde como un vector llamado x. Cuando tecleamos x, nos devuelve el vector.
x<-c(1,3,2,5)
x
## [1] 1 3 2 5
También podemos guardar cosas usando = en lugar de <-:
x=c(1,6,2)
x
## [1] 1 6 2
y=c(1,4,3)
y
## [1] 1 4 3
Si se escribe ?funcname, R abrirá siempre una nueva ventana de ayuda con información adicional sobre la función funcname.
Podemos decirle a R que sume dos conjuntos de números. Entonces sumará el primer número de x al primer número de y, y así sucesivamente. Sin embargo, x y y deberían tener la misma longitud. Podemos comprobar su longitud usando la función length().
#?length
length (x)
## [1] 3
length (y)
## [1] 3
x+y
## [1] 2 10 5
La función matrix() puede ser usada para crear una matriz de números. Antes de usar la función matrix(), podemos aprender más sobre ella:
#?matrix
El archivo de ayuda revela que la función matrix() toma un número de entradas, pero por ahora nos centramos en las tres primeras: los datos (las entradas en la matriz), el número de filas y el número de columnas. Primero, creamos una matriz simple.
x<-matrix (data=c(1,2,3,4) , nrow=2, ncol =2)
x
## [,1] [,2]
## [1,] 1 3
## [2,] 2 4
Note que podríamos omitir el teclear data=, nrow=, y ncol= en el comando matrix() de arriba: es decir, podríamos simplemente teclear
x<-matrix (c(1,2,3,4) ,2,2)
x
## [,1] [,2]
## [1,] 1 3
## [2,] 2 4
y esto tendría el mismo efecto. Sin embargo, a veces puede ser útil especificar los nombres de los argumentos que se pasan, ya que de lo contrario R asumirá que los argumentos de la función se pasan a la función en el mismo orden que se da en el archivo de ayuda de la función. Como ilustra este ejemplo, por defecto R crea matrices rellenando sucesivamente las columnas. Alternativamente, se puede utilizar la opción byrow=TRUE para rellenar la matriz en el orden de las filas.
matrix (data=c(1,2,3,4) , nrow=2, ncol =2,byrow =TRUE)
## [,1] [,2]
## [1,] 1 2
## [2,] 3 4
Observe que en el comando anterior no asignamos la matriz a un valor como x. En este caso la matriz se imprime en la pantalla pero no se guarda para futuros cálculos. La función sqrt() devuelve la raíz cuadrada de cada elemento de un vector o matriz. El comando x^2 eleva cada elemento de x a la potencia 2; cualquier potencia es posible, incluyendo las potencias fraccionarias o negativas.
sqrt(x)
## [,1] [,2]
## [1,] 1.000000 1.732051
## [2,] 1.414214 2.000000
x^2
## [,1] [,2]
## [1,] 1 9
## [2,] 4 16
La función rnorm() genera un vector de variables normales aleatorias, con el primer argumento n el tamaño de la muestra. Cada vez que llamemos a esta función, obtendremos una respuesta diferente. Aquí creamos dos conjuntos de números correlacionados, x e y, y usamos la función cor() para calcular la correlación entre ellos.
x<-rnorm (50)
y<-x+rnorm (50, mean=50, sd=.1)
cor(x,y)
## [1] 0.9923453
Por defecto, rnorm() crea variables aleatorias normales estándar con una media de 0 y una desviación estándar de 1. Sin embargo, la media y la desviación estándar pueden ser alteradas usando los argumentos mean y sd, como se ilustra arriba. A veces queremos que nuestro código reproduzca exactamente el mismo conjunto de números aleatorios; podemos utilizar la función set.seed() para hacerlo. La función set.seed() toma un argumento entero (arbitrario).
set.seed(1303)
rnorm(50)
## [1] -1.1439763145 1.3421293656 2.1853904757 0.5363925179 0.0631929665
## [6] 0.5022344825 -0.0004167247 0.5658198405 -0.5725226890 -1.1102250073
## [11] -0.0486871234 -0.6956562176 0.8289174803 0.2066528551 -0.2356745091
## [16] -0.5563104914 -0.3647543571 0.8623550343 -0.6307715354 0.3136021252
## [21] -0.9314953177 0.8238676185 0.5233707021 0.7069214120 0.4202043256
## [26] -0.2690521547 -1.5103172999 -0.6902124766 -0.1434719524 -1.0135274099
## [31] 1.5732737361 0.0127465055 0.8726470499 0.4220661905 -0.0188157917
## [36] 2.6157489689 -0.6931401748 -0.2663217810 -0.7206364412 1.3677342065
## [41] 0.2640073322 0.6321868074 -1.3306509858 0.0268888182 1.0406363208
## [46] 1.3120237985 -0.0300020767 -0.2500257125 0.0234144857 1.6598706557
Utilizamos set.seed() en todos los laboratorios siempre que realizamos cálculos que implican cantidades aleatorias. En general, esto debería permitir al usuario reproducir nuestros resultados. Sin embargo, debe tenerse en cuenta que a medida que se disponga de nuevas versiones de R es posible que se formen algunas pequeñas discrepancias entre el libro y la salida de R.
Las funciones mean() y var() pueden utilizarse para calcular la media y la varianza de un vector de números. Aplicando sqrt() a la salida de var() se obtendrá la desviación estándar. O simplemente podemos usar la función sd().
set.seed(3)
y<-rnorm(100)
mean(y)
## [1] 0.01103557
var(y)
## [1] 0.7328675
sqrt(var(y))
## [1] 0.8560768
sd(y)
## [1] 0.8560768
La función seq() puede ser usada para crear una secuencia de números. Por ejemplo, seq(a,b) hace un vector de números enteros entre a y b. Hay muchas otras opciones: por ejemplo, seq(0,1,length=10) hace una secuencia de 10 números que están igualmente espaciados entre 0 y 1. Escribir 3:11 es una forma abreviada de seq(3,11) para argumentos de números enteros.
x<-seq (1 ,10)
x
## [1] 1 2 3 4 5 6 7 8 9 10
x<-1:10
x
## [1] 1 2 3 4 5 6 7 8 9 10
x<-seq(-pi ,pi ,length =50)
x
## [1] -3.14159265 -3.01336438 -2.88513611 -2.75690784 -2.62867957 -2.50045130
## [7] -2.37222302 -2.24399475 -2.11576648 -1.98753821 -1.85930994 -1.73108167
## [13] -1.60285339 -1.47462512 -1.34639685 -1.21816858 -1.08994031 -0.96171204
## [19] -0.83348377 -0.70525549 -0.57702722 -0.44879895 -0.32057068 -0.19234241
## [25] -0.06411414 0.06411414 0.19234241 0.32057068 0.44879895 0.57702722
## [31] 0.70525549 0.83348377 0.96171204 1.08994031 1.21816858 1.34639685
## [37] 1.47462512 1.60285339 1.73108167 1.85930994 1.98753821 2.11576648
## [43] 2.24399475 2.37222302 2.50045130 2.62867957 2.75690784 2.88513611
## [49] 3.01336438 3.14159265
A menudo deseamos examinar parte de un conjunto de datos. Supongamos que nuestros datos están almacenados en la matriz A.
A<-matrix(1:16 ,4 ,4)
A
## [,1] [,2] [,3] [,4]
## [1,] 1 5 9 13
## [2,] 2 6 10 14
## [3,] 3 7 11 15
## [4,] 4 8 12 16
Luego, tecleando:
A[2,3]
## [1] 10
seleccionará el elemento correspondiente a la segunda fila y la tercera columna. El primer número después del símbolo de paréntesis abierto [ se refiere siempre a la fila, y el segundo número se refiere siempre a la columna. También podemos seleccionar varias filas y columnas a la vez, proporcionando vectores como los índices.
A[c(1,3) , c(2,4) ]
## [,1] [,2]
## [1,] 5 13
## [2,] 7 15
A[1:3 ,2:4]
## [,1] [,2] [,3]
## [1,] 5 9 13
## [2,] 6 10 14
## [3,] 7 11 15
A[seq(1,3),seq(2,4)]
## [,1] [,2] [,3]
## [1,] 5 9 13
## [2,] 6 10 14
## [3,] 7 11 15
A[1:2,]
## [,1] [,2] [,3] [,4]
## [1,] 1 5 9 13
## [2,] 2 6 10 14
A[,1:2]
## [,1] [,2]
## [1,] 1 5
## [2,] 2 6
## [3,] 3 7
## [4,] 4 8
Los dos últimos ejemplos incluyen la ausencia de índice para las columnas o la ausencia de índice para las filas. Estos indican que R debe incluir todas las columnas o todas las filas, respectivamente. R trata una sola fila o columna de una matriz como un vector.
A[1,]
## [1] 1 5 9 13
El uso de un signo negativo - en el índice le dice a R que mantenga todas las filas o columnas excepto las indicadas en el índice.
A[-c(1,3), ]
## [,1] [,2] [,3] [,4]
## [1,] 2 6 10 14
## [2,] 4 8 12 16
A[-c(1,3),-c(1,3,4)]
## [1] 6 8
La función dim() da como resultado el número de filas seguido por el número de columnas de una matriz dada.
dim(A)
## [1] 4 4