2019-09-23

¿Para que R?

Tipos de datos

  • Los datos categóricos son variables definidas por un pequeño número de grupos.

    • Categóricos ordinales tienen un orden inherente a las categorías (leve / medio / caliente, por ejemplo).

    • Categóricos no ordinales no tienen orden en las categorías.

  • Los datos numéricos toman una variedad de valores numéricos.
    • Las variables continuas pueden tomar cualquier valor.
    • Las variables discretas se limitan a conjuntos de valores específicos.
  • ¿Que tipo de datos son estos?
## [1] 0 1 2 3 4 5
## [1] 0.5 0.6 0.7 0.8 0.9 1.0
## [1] "Raquel Muñiz Salazar"        "Brenda Ivette Iduarte Frias"
## [3] "Clara Hereu"

End()

Outlines

  1. Introducción a R
  • Operaciones matemáticas y asignaciones
  • Tipos de objectos y manipulación de vectores
  • Operaciones racionales
  • Graficos con R
  • Leyendo archivos

Empezando con R

Copien y pegen el texto de arriba en su terminal, y R deberá regresarles algo así:

print("Esta función simplemente imprime un texto a la pantalla")
## [1] "Esta función simplemente imprime un texto a la pantalla"

Para obtener ayuda en R de cualquier función, escribimos un signo de interrogación adelante del nombre de la función, por ejemplo:

?print

Operaciones matemáticas y asignaciones

2+1
## [1] 3
3-5
## [1] -2
4*4
## [1] 16
16/4
## [1] 4
7.15 * sqrt(4)
## [1] 14.3

Operaciones matemáticas y asignaciones

Para guardar uno de estos resultados, tenemos que asignarlo a un objeto en R. Podemos darle casi cualquier nombre a los objetos, pero una restricción importante es que no podemos nombrarlos comenzando por un número. Para guardar usamos el símbolo = o <-.

x = 3+4.5
otro_numero <- x * sqrt(4)
otro_numero
## [1] 15

Para ver el contenido de uno de estos objetos, simplemente tecleamos su nombre en R

La ventaja de guardar así los resultados, es que podemos seguirlos usando en nuevas operaciones:

x + 2*otro_numero
## [1] 37.5

Operaciones matemáticas y asignaciones

Una de las ventajas de R es que puede realizar operaciones sobre muchos números a la vez. Para ello, primero generamos un objeto que contenga varios números, usando la función c(). Esta instrucción es para combinar.

edades = c(39,36,10,8,1,1,88)

Para ver los números que acabamos de guardar, simplemente tecleamos edades

edades
## [1] 39 36 10  8  1  1 88

Operaciones matemáticas y asignaciones

edades
## [1] 39 36 10  8  1  1 88
  • ¿Que operación nos lleva a tener los siguientes resultados?
## [1] 40 37 11  9  2  2 89
## [1] 390 360 100  80  10  10 880
## [1] 400 370 110  90  20  20 890

Operaciones matemáticas y asignaciones

  • ¿Que hace cada una de las siguientes funciones?
sum(edades)
mean(edades)
max(edades)
min(edades)
range(edades)
sort(edades)

unique(edades)
table(edades)

Operaciones matemáticas y asignaciones

Si no saben el nombre de la función que buscan, pueden tratar de encontrarla usando el comando ?? en la terminal:

??deviation
  • ¿Cuál es la función para calcular la standard deviation?

Tipos de objectos y manipulación de vectores

En R podemos tener valores de texto, los cuales se encierran entre comillas. Del mismo modo que guardamos una serie de números en el objeto edades, podemos guardar una serie de valores de texto en un nuevo objeto:

nombres = c("Homero","Marge","Bart","Lisa","Maggie","Snowball","Abraham")

Muchas veces necesitamos el texto para etiquetar a los valores numéricos (por ejemplo, tener valores numéricos de expresión con etiquetas de texto para los nombres de los genes). Hay una función names() para asignar nombres o etiquetas de texto:

names(edades) = nombres

y ahora si vemos el contenido de edades, veremos que ya tiene sus debidas etiquetas:

edades
##   Homero    Marge     Bart     Lisa   Maggie Snowball  Abraham 
##       39       36       10        8        1        1       88

Tipos de objectos y manipulación de vectores

edades
##   Homero    Marge     Bart     Lisa   Maggie Snowball  Abraham 
##       39       36       10        8        1        1       88

Nuestro objecto edades tiene la particularidad de que contiene varios valores. A este tipo de objecto se le llama un “vector” en R.

Para obtener el primer elemento del vector:

edades[1]
## Homero 
##     39
  • ¿Como obtenemos el quinto elemento del vector edades?
## Maggie 
##      1

Tipos de objectos y manipulación de vectores

Se puede también obtener una serie de elementos del vector a la vez. Para ello, necesitamos indicarle a R todos los índices o posiciones de los elementos que queremos usando la expresión c().

edades[c(1,5)]
## Homero Maggie 
##     39      1

Por último, podemos usar índices negativos para indicarle a R que queremos quitar temporalmente ciertos elementos de un vector:

edades[-c(1,5)]
##    Marge     Bart     Lisa Snowball  Abraham 
##       36       10        8        1       88

Ejercicios:

  • ¿Cuál es el promedio de las edades, sin contar el de Maggie?
  • Quiten a Snowball del vector, ordéna el vector por edades y guárdenlo como un nuevo objeto.

Operaciones relacionales

Muchas veces queremos “preguntarle” cosas a los números, como por ejemplo, qué genes tienen un valor de expresión mayor a un umbral. Este tipo de preguntas se contestan mediante operaciones relaciones (mayor que, menor que, igual a, etc). Con nuestro objeto de edades podemos ver esto. Quiénes tienen una edad mayor a 10?

edades
##   Homero    Marge     Bart     Lisa   Maggie Snowball  Abraham 
##       39       36       10        8        1        1       88
edades > 10
##   Homero    Marge     Bart     Lisa   Maggie Snowball  Abraham 
##     TRUE     TRUE    FALSE    FALSE    FALSE    FALSE     TRUE

Operaciones relacionales

Del mismo modo podemos preguntar cuales son menores que, mayores o iguales que, o iguales a, un valor:

edades < 10
##   Homero    Marge     Bart     Lisa   Maggie Snowball  Abraham 
##    FALSE    FALSE    FALSE     TRUE     TRUE     TRUE    FALSE
edades >= 10
##   Homero    Marge     Bart     Lisa   Maggie Snowball  Abraham 
##     TRUE     TRUE     TRUE    FALSE    FALSE    FALSE     TRUE
edades == 1
##   Homero    Marge     Bart     Lisa   Maggie Snowball  Abraham 
##    FALSE    FALSE    FALSE    FALSE     TRUE     TRUE    FALSE

OJO! Se usa doble signo de igual, ¿Porque?

Operaciones relacionales

En todos estos casos R nos regresa una serie de valores TRUE/FALSE, usualmente llamados valores lógicos. Un vector de valores lógicos puede resultar muy útil, como se verá en los siguientes ejemplos:

sum(edades > 10)
## [1] 3
edades[edades > 10]
##  Homero   Marge Abraham 
##      39      36      88

Ejercicios:

  • ¿Qué hacen las últimas instrucciones?
  • ¿Cómo obtienen aquellas edades que son mayores al promedio de todas las edades?

Graficando con R

Visualización de datos

Las visualizaciones de información (Datavis) suelen ser menos estéticamente ricas que las infografías y tiene como objetivo:

  • Contar una historia
  • Transmitir un mensaje
  • Trazados con la ayuda de métodos computarizados (puede tener toques personalizados).
  • Fácil de regenerar con diferentes datos con dimensiones o características similares (reciclado de código).
  • Estéticamente estéril (los datos no están decorados); y relativamente rico en datos.

The data give the speed of cars and the distances taken to stop in the 1920s
speed dist
4 2
4 10
7 4
7 22
8 16
9 10

plot(cars)

barplot(edades)

pie(edades)

hist(edades)

Todas estas funciones tienen su página de ayuda, accesible por ejemplo con ?hist. También existe una gran cantidad de información avanzada sobre los parámetros que podemos cambiar al graficar, en ?par. Toma tiempo acostumbrarse a todos ellos. Por ahora veamos un ejemplo de complejidad media:

hist(edades, col="skyblue", main="El Histograma Azul", ylab="Personas")

Guardando figuras

Hay muchas maneras de guardar estas imágenes. Por ejemplo, para guardar la última en un archivo PDF hacemos lo siguiente:

pdf("histograma.pdf")

hist(edades, col="skyblue", main="El Histograma Azul", ylab="Personas")

dev.off()

La función pdf() crea un archivo “histograma.pdf” y todas las instrucciones de graficación que hagamos de ahí en adelante se guardarán en este archivo (y no saldrán en pantalla). Para cerrar el archivo correctamente, tenemos que usar la función dev.off().

Leyendo archivos y manipulando tablas

Por lo general no queremos estar metiendo nuestros datos a mano en R. Si ya tenemos una serie de números en un archivo de texto, los podemos importar a R fácilmente. Para este ejercicio, bajen el archivo num.txt y guárdenlo en el directorio de trabajo de R.

Para esto pueden ser útiles las siguientes funciones, para saber cuál es el directorio de trabajo de nuestra sesión de R y para listar los archivos que se encuentran ahí:

url <- "http://datos.langebio.cinvestav.mx/~cei/cursos/BP_2018/data/tab.txt"

tab = read.table(url, header = TRUE)

str(tab)
## 'data.frame':    50 obs. of  3 variables:
##  $ cond1: int  252 141 165 174 192 225 176 191 229 170 ...
##  $ cond2: int  233 179 195 190 231 142 190 210 162 112 ...
##  $ cond3: int  182 216 175 188 194 197 218 175 191 192 ...

Ejercicio

  • Averigua para que sirve la funcion str

boxplot(tab, col=c("red","green","blue"))

Una tabla consta de dos dimensiones: renglones y columnas. En estos casos, los corchetes cuadrados van a aceptar dos series de índicies, separados por una coma:

tab[10, 3]
## [1] 192
tab[c(1,6,10), c(1,3)]
##        cond1 cond3
## gene1    252   182
## gene6    225   197
## gene10   170   192

Podemos también especificar índices en sólo una de las dimensiones:

tab[c(1,6,10), ] # Renglones
##        cond1 cond2 cond3
## gene1    252   233   182
## gene6    225   142   197
## gene10   170   112   192
tab[, c(1,3)] # Columnas
##        cond1 cond3
## gene1    252   182
## gene2    141   216
## gene3    165   175
## gene4    174   188
## gene5    192   194
## gene6    225   197
## gene7    176   218
## gene8    191   175
## gene9    229   191
## gene10   170   192
## gene11   125   215
## gene12   229   188
## gene13   176   201
## gene14   190   199
## gene15   189   171
## gene16   239   192
## gene17   170   228
## gene18   233   231
## gene19   180   201
## gene20   219   185
## gene21   229   198
## gene22   223   191
## gene23   203   188
## gene24   161   174
## gene25   247   210
## gene26   199   170
## gene27   224   208
## gene28   260   208
## gene29   225   165
## gene30   327   184
## gene31   171   195
## gene32   244   186
## gene33   170   195
## gene34   115   219
## gene35   272   206
## gene36   131   210
## gene37   240   242
## gene38   173   170
## gene39   279   187
## gene40    85   215
## gene41   175   159
## gene42   231   217
## gene43   198   236
## gene44   214   250
## gene45   219   170
## gene46   235   199
## gene47   171   210
## gene48   315   171
## gene49   215   229
## gene50   206   191

OJO, no se les olvide poner la primera coma, ¿Porque?

Ejercicios (Puntos extras)

  1. Muestren los valores de expresión del 3er gen

  2. Cuál es el promedio de expresión en la 2da condición?

  3. Cuántos genes tienen un valor de expresión mayor en la primera condición comparada con la tercera?

  4. Avanzado: Revisen la ayuda de la función apply() para averiguar como calcular el promedio de expresión de cada uno de los genes, con una sola instrucción. Y para cada una de las condiciones?