2019-09-23
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.
numéricos
toman una variedad de valores numéricos.
variables continuas
pueden tomar cualquier valor.variables discretas
se limitan a conjuntos de valores específicos.## [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"
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:
2+1
## [1] 3
3-5
## [1] -2
4*4
## [1] 16
16/4
## [1] 4
7.15 * sqrt(4)
## [1] 14.3
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
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
edades
## [1] 39 36 10 8 1 1 88
## [1] 40 37 11 9 2 2 89
## [1] 390 360 100 80 10 10 880
## [1] 400 370 110 90 20 20 890
sum(edades) mean(edades) max(edades) min(edades) range(edades) sort(edades) unique(edades) table(edades)
Si no saben el nombre de la función que buscan, pueden tratar de encontrarla usando el comando ??
en la terminal:
??deviation
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
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
## Maggie ## 1
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:
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
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?
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:
Las visualizaciones de información (Datavis) suelen ser menos estéticamente ricas que las infografías y tiene como objetivo:
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")
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()
.
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
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)
Muestren los valores de expresión del 3er gen
Cuál es el promedio de expresión en la 2da condición?
Cuántos genes tienen un valor de expresión mayor en la primera condición comparada con la tercera?
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?