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

http://cran.r-project.org/
https://rstudio.com/products/rstudio/download/

1. Comandos básicos

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á sie??mpre 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.9950523

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

2. Matrices e Indexación de datos

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

3. Gráficos básicos

La función plot() es la forma principal de representar los datos en R. Por ejemplo, plot(x,y) produce un diagrama de dispersión de los números en x frente a los números en y. Hay muchas opciones adicionales que pueden pasarse a la función plot(). Por ejemplo, si se pasa el argumento xlab se obtendrá una etiqueta en el eje x. Para obtener más información sobre la función plot(), escribe ?plot.

x<-rnorm(100)
y<-rnorm(100)
plot(x,y)

plot(x,y,xlab="Este es el eje x",ylab="Este es el eje y",
main="Plot de X vs Y")

4. Secuencias de números

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

5. Carga de datos

Para la mayoría de los análisis, el primer paso consiste en importar un conjunto de datos a R. La función read.table() es una de las principales formas de hacerlo. El archivo de ayuda contiene detalles sobre cómo utilizar esta función. Podemos usar la función write.table() para exportar datos.

Antes de intentar cargar un conjunto de datos, debemos asegurarnos de que R sepa buscar los datos en el directorio apropiado estableciendolo desde las opciones de RStudio. Comenzamos cargando en el conjunto de datos de Auto. Estos datos son parte de la biblioteca de ISLR pero para ilustrar la función read.table() los cargamos ahora desde un archivo de texto. El siguiente comando cargará el archivo Auto.data en R y lo almacenará como un objeto llamado Auto, en un formato llamado data frame.

Auto<-read.table("Auto.data.txt")
head(Auto)
##     V1        V2           V3         V4     V5           V6   V7     V8
## 1  mpg cylinders displacement horsepower weight acceleration year origin
## 2 18.0         8        307.0      130.0  3504.         12.0   70      1
## 3 15.0         8        350.0      165.0  3693.         11.5   70      1
## 4 18.0         8        318.0      150.0  3436.         11.0   70      1
## 5 16.0         8        304.0      150.0  3433.         12.0   70      1
## 6 17.0         8        302.0      140.0  3449.         10.5   70      1
##                          V9
## 1                      name
## 2 chevrolet chevelle malibu
## 3         buick skylark 320
## 4        plymouth satellite
## 5             amc rebel sst
## 6               ford torino

Tenga en cuenta que Auto.data es simplemente un archivo de texto, que puede abrir en su computadora usando un editor de texto estándar.

Este conjunto de datos en particular no se ha cargado correctamente, porque R ha asumido que los nombres de las variables forman parte de los datos y por lo tanto los ha incluido en la primera fila. El conjunto de datos también incluye una serie de observaciones que faltan, indicadas por un signo de interrogación ?. Los valores faltantes son comunes en los conjuntos de datos reales. El uso de la opción header=T (o header=TRUE) en la función read.table() le dice a R que la primera línea del archivo contiene los nombres de las variables, y el uso de la opción na.strings le dice a R que cada vez que vea un determinado carácter o conjunto de caracteres (como un signo de interrogación), debe tratarse como un elemento faltante de la matriz de datos.

Auto<-read.table ("Auto.data.txt", header =TRUE,na.strings ="?")
head(Auto)
##   mpg cylinders displacement horsepower weight acceleration year origin
## 1  18         8          307        130   3504         12.0   70      1
## 2  15         8          350        165   3693         11.5   70      1
## 3  18         8          318        150   3436         11.0   70      1
## 4  16         8          304        150   3433         12.0   70      1
## 5  17         8          302        140   3449         10.5   70      1
## 6  15         8          429        198   4341         10.0   70      1
##                        name
## 1 chevrolet chevelle malibu
## 2         buick skylark 320
## 3        plymouth satellite
## 4             amc rebel sst
## 5               ford torino
## 6          ford galaxie 500

Excel es un programa de almacenamiento de datos de formato común. Una forma fácil de cargar esos datos en R es guardarlos como un archivo csv (valor separado por comas) y luego usar la función read.csv() para cargarlos.

Auto.original<-read.csv(file="Auto.csv", na.strings ="?")
head(Auto.original)
##   mpg cylinders displacement horsepower weight acceleration year origin
## 1  18         8          307        130   3504         12.0   70      1
## 2  15         8          350        165   3693         11.5   70      1
## 3  18         8          318        150   3436         11.0   70      1
## 4  16         8          304        150   3433         12.0   70      1
## 5  17         8          302        140   3449         10.5   70      1
## 6  15         8          429        198   4341         10.0   70      1
##                        name
## 1 chevrolet chevelle malibu
## 2         buick skylark 320
## 3        plymouth satellite
## 4             amc rebel sst
## 5               ford torino
## 6          ford galaxie 500
dim(Auto.original)
## [1] 397   9
Auto.original[1:4 ,]
##   mpg cylinders displacement horsepower weight acceleration year origin
## 1  18         8          307        130   3504         12.0   70      1
## 2  15         8          350        165   3693         11.5   70      1
## 3  18         8          318        150   3436         11.0   70      1
## 4  16         8          304        150   3433         12.0   70      1
##                        name
## 1 chevrolet chevelle malibu
## 2         buick skylark 320
## 3        plymouth satellite
## 4             amc rebel sst

La función dim() nos dice que los datos tienen 392 observaciones, o filas, y nueve variables, o columnas. Hay varias maneras de tratar los datos que faltan. En este caso, sólo cinco de las filas contienen observaciones faltantes, y por lo tanto elegimos usar la función na.omit() para simplemente eliminar estas filas.

Auto<-na.omit(Auto.original)
dim(Auto)
## [1] 392   9

Una vez que los datos se cargan correctamente, podemos usar names() para comprobar los nombres de las variables.

names(Auto)
## [1] "mpg"          "cylinders"    "displacement" "horsepower"   "weight"      
## [6] "acceleration" "year"         "origin"       "name"

crear una mtriz llamada mi_matriz, con 4 columnas y se llena con los valores de 11993-12644. cuantos renglones tiene la matriz?

X<-matrix(11993:12644,,4)
X
##         [,1]  [,2]  [,3]  [,4]
##   [1,] 11993 12156 12319 12482
##   [2,] 11994 12157 12320 12483
##   [3,] 11995 12158 12321 12484
##   [4,] 11996 12159 12322 12485
##   [5,] 11997 12160 12323 12486
##   [6,] 11998 12161 12324 12487
##   [7,] 11999 12162 12325 12488
##   [8,] 12000 12163 12326 12489
##   [9,] 12001 12164 12327 12490
##  [10,] 12002 12165 12328 12491
##  [11,] 12003 12166 12329 12492
##  [12,] 12004 12167 12330 12493
##  [13,] 12005 12168 12331 12494
##  [14,] 12006 12169 12332 12495
##  [15,] 12007 12170 12333 12496
##  [16,] 12008 12171 12334 12497
##  [17,] 12009 12172 12335 12498
##  [18,] 12010 12173 12336 12499
##  [19,] 12011 12174 12337 12500
##  [20,] 12012 12175 12338 12501
##  [21,] 12013 12176 12339 12502
##  [22,] 12014 12177 12340 12503
##  [23,] 12015 12178 12341 12504
##  [24,] 12016 12179 12342 12505
##  [25,] 12017 12180 12343 12506
##  [26,] 12018 12181 12344 12507
##  [27,] 12019 12182 12345 12508
##  [28,] 12020 12183 12346 12509
##  [29,] 12021 12184 12347 12510
##  [30,] 12022 12185 12348 12511
##  [31,] 12023 12186 12349 12512
##  [32,] 12024 12187 12350 12513
##  [33,] 12025 12188 12351 12514
##  [34,] 12026 12189 12352 12515
##  [35,] 12027 12190 12353 12516
##  [36,] 12028 12191 12354 12517
##  [37,] 12029 12192 12355 12518
##  [38,] 12030 12193 12356 12519
##  [39,] 12031 12194 12357 12520
##  [40,] 12032 12195 12358 12521
##  [41,] 12033 12196 12359 12522
##  [42,] 12034 12197 12360 12523
##  [43,] 12035 12198 12361 12524
##  [44,] 12036 12199 12362 12525
##  [45,] 12037 12200 12363 12526
##  [46,] 12038 12201 12364 12527
##  [47,] 12039 12202 12365 12528
##  [48,] 12040 12203 12366 12529
##  [49,] 12041 12204 12367 12530
##  [50,] 12042 12205 12368 12531
##  [51,] 12043 12206 12369 12532
##  [52,] 12044 12207 12370 12533
##  [53,] 12045 12208 12371 12534
##  [54,] 12046 12209 12372 12535
##  [55,] 12047 12210 12373 12536
##  [56,] 12048 12211 12374 12537
##  [57,] 12049 12212 12375 12538
##  [58,] 12050 12213 12376 12539
##  [59,] 12051 12214 12377 12540
##  [60,] 12052 12215 12378 12541
##  [61,] 12053 12216 12379 12542
##  [62,] 12054 12217 12380 12543
##  [63,] 12055 12218 12381 12544
##  [64,] 12056 12219 12382 12545
##  [65,] 12057 12220 12383 12546
##  [66,] 12058 12221 12384 12547
##  [67,] 12059 12222 12385 12548
##  [68,] 12060 12223 12386 12549
##  [69,] 12061 12224 12387 12550
##  [70,] 12062 12225 12388 12551
##  [71,] 12063 12226 12389 12552
##  [72,] 12064 12227 12390 12553
##  [73,] 12065 12228 12391 12554
##  [74,] 12066 12229 12392 12555
##  [75,] 12067 12230 12393 12556
##  [76,] 12068 12231 12394 12557
##  [77,] 12069 12232 12395 12558
##  [78,] 12070 12233 12396 12559
##  [79,] 12071 12234 12397 12560
##  [80,] 12072 12235 12398 12561
##  [81,] 12073 12236 12399 12562
##  [82,] 12074 12237 12400 12563
##  [83,] 12075 12238 12401 12564
##  [84,] 12076 12239 12402 12565
##  [85,] 12077 12240 12403 12566
##  [86,] 12078 12241 12404 12567
##  [87,] 12079 12242 12405 12568
##  [88,] 12080 12243 12406 12569
##  [89,] 12081 12244 12407 12570
##  [90,] 12082 12245 12408 12571
##  [91,] 12083 12246 12409 12572
##  [92,] 12084 12247 12410 12573
##  [93,] 12085 12248 12411 12574
##  [94,] 12086 12249 12412 12575
##  [95,] 12087 12250 12413 12576
##  [96,] 12088 12251 12414 12577
##  [97,] 12089 12252 12415 12578
##  [98,] 12090 12253 12416 12579
##  [99,] 12091 12254 12417 12580
## [100,] 12092 12255 12418 12581
## [101,] 12093 12256 12419 12582
## [102,] 12094 12257 12420 12583
## [103,] 12095 12258 12421 12584
## [104,] 12096 12259 12422 12585
## [105,] 12097 12260 12423 12586
## [106,] 12098 12261 12424 12587
## [107,] 12099 12262 12425 12588
## [108,] 12100 12263 12426 12589
## [109,] 12101 12264 12427 12590
## [110,] 12102 12265 12428 12591
## [111,] 12103 12266 12429 12592
## [112,] 12104 12267 12430 12593
## [113,] 12105 12268 12431 12594
## [114,] 12106 12269 12432 12595
## [115,] 12107 12270 12433 12596
## [116,] 12108 12271 12434 12597
## [117,] 12109 12272 12435 12598
## [118,] 12110 12273 12436 12599
## [119,] 12111 12274 12437 12600
## [120,] 12112 12275 12438 12601
## [121,] 12113 12276 12439 12602
## [122,] 12114 12277 12440 12603
## [123,] 12115 12278 12441 12604
## [124,] 12116 12279 12442 12605
## [125,] 12117 12280 12443 12606
## [126,] 12118 12281 12444 12607
## [127,] 12119 12282 12445 12608
## [128,] 12120 12283 12446 12609
## [129,] 12121 12284 12447 12610
## [130,] 12122 12285 12448 12611
## [131,] 12123 12286 12449 12612
## [132,] 12124 12287 12450 12613
## [133,] 12125 12288 12451 12614
## [134,] 12126 12289 12452 12615
## [135,] 12127 12290 12453 12616
## [136,] 12128 12291 12454 12617
## [137,] 12129 12292 12455 12618
## [138,] 12130 12293 12456 12619
## [139,] 12131 12294 12457 12620
## [140,] 12132 12295 12458 12621
## [141,] 12133 12296 12459 12622
## [142,] 12134 12297 12460 12623
## [143,] 12135 12298 12461 12624
## [144,] 12136 12299 12462 12625
## [145,] 12137 12300 12463 12626
## [146,] 12138 12301 12464 12627
## [147,] 12139 12302 12465 12628
## [148,] 12140 12303 12466 12629
## [149,] 12141 12304 12467 12630
## [150,] 12142 12305 12468 12631
## [151,] 12143 12306 12469 12632
## [152,] 12144 12307 12470 12633
## [153,] 12145 12308 12471 12634
## [154,] 12146 12309 12472 12635
## [155,] 12147 12310 12473 12636
## [156,] 12148 12311 12474 12637
## [157,] 12149 12312 12475 12638
## [158,] 12150 12313 12476 12639
## [159,] 12151 12314 12477 12640
## [160,] 12152 12315 12478 12641
## [161,] 12153 12316 12479 12642
## [162,] 12154 12317 12480 12643
## [163,] 12155 12318 12481 12644

Genera un vector de variables normales aleatorias, semilla 555, tamaño 200, media 200 y desviación estándar 20. ¿Cuál es la media, varianza y la desviación estándar de este vector?

set.seed(555)
y<-rnorm(200,200,20)
mean(y)
## [1] 200.4567
var(y)
## [1] 395.7041
sd(y)
## [1] 19.89231

utiliza la función plot para crear un grafico x/y y=x

y <- X
plot(X,y,xlab="Este es el eje x",ylab="Este es el eje y",
main="Plot de X vs Y")