R Guia
R Guia
R Guia
14 Dec 2021
Índice
Objetivo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
1 Introducción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
1.1 ¿Qué es R? . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
1.1.1 Historia . . . . . . . . . . . . . . . . . . . . . . . . . . 6
1.1.2 Distribuciones de R . . . . . . . . . . . . . . . . . . . . 7
1.1.3 Instalando R. . . . . . . . . . . . . . . . . . . . . . . . 7
1.2 ¿Qué es RStudio . . . . . . . . . . . . . . . . . . . . . . . . . 7
1.2.1 Distribuciones . . . . . . . . . . . . . . . . . . . . . . . 7
1.2.2 Instalación . . . . . . . . . . . . . . . . . . . . . . . . 7
1.3 Iniciando RStudio desde el servidor del curso . . . . . . . . . . . 8
5 Vectores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
5.1 Creación de un vector . . . . . . . . . . . . . . . . . . . . . . 27
5.2 Adicionando elementos a un vector . . . . . . . . . . . . . . . . 27
5.3 Combinando vectores . . . . . . . . . . . . . . . . . . . . . . 28
5.4 Creación de vectores con secuencias numéricas usando : . . . . . 28
5.5 Accediendo a los elementos de un vector . . . . . . . . . . . . . 28
5.6 La función names . . . . . . . . . . . . . . . . . . . . . . . . . 29
5.7 Aritmética vectorial . . . . . . . . . . . . . . . . . . . . . . . . 30
5.8 Operaciones relacionales en un vector . . . . . . . . . . . . . . 30
5.9 Ejercicios 6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
6 Factores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
6.1 La función summary en factores . . . . . . . . . . . . . . . . . . 32
7 Dataframes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
7.1 Manejo de dataframes . . . . . . . . . . . . . . . . . . . . . . 34
7.2 Algunas funciones aplicables a dataframe . . . . . . . . . . . . . 35
7.3 Operaciones relacionales en data.frames . . . . . . . . . . . . . 36
2
Introducción a R y RStudio
7.4 Ejercicios 7 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
8 Lectura de archivos . . . . . . . . . . . . . . . . . . . . . . . . . 37
8.1 La función read.table . . . . . . . . . . . . . . . . . . . . . . 37
8.2 Parámetros más comunes de read.table . . . . . . . . . . . . . 38
8.3 Algunas funciones para visualizar los datos . . . . . . . . . . . . 39
8.4 Variantes de read.table . . . . . . . . . . . . . . . . . . . . . 40
8.5 La función scan . . . . . . . . . . . . . . . . . . . . . . . . . . 40
9 Escritura de archivos . . . . . . . . . . . . . . . . . . . . . . . . . 40
9.1 La función write.table . . . . . . . . . . . . . . . . . . . . . . 40
9.2 La función write . . . . . . . . . . . . . . . . . . . . . . . . . 41
9.3 Ejercicios 8 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
3
Introducción a R y RStudio
11 Respuestas de Ejercicios . . . . . . . . . . . . . . . . . . . . . . 73
11.1 Solución Ejercicios 1 . . . . . . . . . . . . . . . . . . . . . . . 73
11.2 Solución Ejercicios 2 . . . . . . . . . . . . . . . . . . . . . . . 74
11.3 Solución Ejercicios 3 . . . . . . . . . . . . . . . . . . . . . . . 74
11.4 Solución Ejercicios 4 . . . . . . . . . . . . . . . . . . . . . . . 75
11.5 Solución Ejercicios 5 . . . . . . . . . . . . . . . . . . . . . . . 76
11.6 Solución Ejercicios 6 . . . . . . . . . . . . . . . . . . . . . . . 76
11.7 Solución Ejercicios 7 . . . . . . . . . . . . . . . . . . . . . . . 78
11.8 Solución Ejercicios 8 . . . . . . . . . . . . . . . . . . . . . . . 79
11.9 Solución Ejercicios 9 . . . . . . . . . . . . . . . . . . . . . . . 79
11.10 Solución Ejercicios 10 . . . . . . . . . . . . . . . . . . . . . . 80
11.11 Solución Ejercicios 11 . . . . . . . . . . . . . . . . . . . . . . 80
11.12 Solución Ejercicios 12 . . . . . . . . . . . . . . . . . . . . . . 80
11.13 Solución Ejercicios 13 . . . . . . . . . . . . . . . . . . . . . . 81
11.14 Solución Ejercicios 14 . . . . . . . . . . . . . . . . . . . . . . 81
11.15 Solución Ejercicios 15 . . . . . . . . . . . . . . . . . . . . . . 82
11.16 Solución Ejercicios 16 . . . . . . . . . . . . . . . . . . . . . . 82
12 Apéndices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
12.1 Apéndice 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
12.1.1 Iniciando R desde línea de comandos . . . . . . . . . . . . 83
12.1.2 Manejo de paquetes desde línea de comandos . . . . . . . . 83
12.1.3 Consultando la ayuda desde línea de comandos . . . . . . . . 84
12.1.3.1 Ayuda en general . . . . . . . . . . . . . . . . . . . . . . . 85
12.1.3.2 Ayuda relacionada a un término . . . . . . . . . . . . . . . 85
12.1.3.3 Ayuda sobre ejemplos de uso de una función . . . . . . . . 86
12.1.3.4 Ayuda sobre argumentos de una función . . . . . . . . . . . 87
12.1.3.5 Búsquedas aproximadas . . . . . . . . . . . . . . . . . . . . 87
4
Introducción a R y RStudio
5
Introducción a R y RStudio
Objetivo
Tener una visión general de qué es R, para qué sirve, cómo instalarlo y brindar los conceptos
básicos de R para que los alumnos puedan utilizarlos para el manejo y análisis de datos. Así
como conocer la gramática básica (estética y capas geométricas) para la creación de gráficas
diferentes tipos de gráficas con el paquete ggplot2 .
1 Introducción
1.1 ¿Qué es R?
R es un entorno integrado para el manejo de datos, cálculo y procedimientos gráficos y
estadísticos. Los principales aspectos que ofrece son:
1. Facilidad para el manejo y el almacenamiento de datos.
2. Un conjunto de operadores para cálculo con vectores y matrices.
3. Una colección extensa e integrada de herramientas intermedias para el análisis estadístico
de datos.
4. Multitud de facilidades gráficas.
5. Un lenguaje de programación simple.
1.1.1 Historia
R fue desarrollado en los 90’s por Ross Ihaka y Robert Gentleman, del departamento de
Estadística de la Universdad de Aucklan. R es una implementación “open-source” del lenguaje
S ( Creado por John Chambers a principios de los 70’s ), que también es la base del sistema
S-Plus (entorno comercial). El desarrollo actual de R es responsabilidad del R Development
Core Team. Además, R dispone de una comunidad de desarrolladores/usuarios detrás que se
dedican constantemente a la mejora y a la ampliación de las funcionalidades y capacidades
del programa. Nosotros mismos podemos ser desarrolladores de R!!
6
Introducción a R y RStudio
1.1.2 Distribuciones de R
R se distribuye para Windows ,Linux, MacOSX y Unix. Los programas fuentes, binarios y la
documentación de R, así como una lista de las preguntas más frecuentes acerca de R, se
encuentran en el sitio de CRAN Comprehensive R Archive Network.
1.1.3 Instalando R
1.2.1 Distribuciones
RStudio esta disponible en versiones open source y comercial, para escritorio (Windows, Mac
y Linux) o desde web usando RStudio Server o RStudio Server Pro.
RStudio dispone de hojas de consulta rápida, que facilitan el aprendizaje y el uso de algunos
de sus paquetes.
1.2.2 Instalación
7
Introducción a R y RStudio
Una vez instalado, puedes iniciar RStudio, dando doble clic en el ícono de RStudio.
Nota: Para fines prácticos de este curso, no haremos la instalación de RStudio. Por otra parte,
en este curso trabajaremos R desde el ambiente de trabajo de RStudio. Sin embargo, en el
Apéndice 1, se muestran una breve descripción de R desde línea de comandos, por ejemplo:
Iniciando R desde línea de comandos.
2.2 Paquetes de R
Las funciones de R se agrupan en paquetes (packages). Los paquetes que contienen las
funciones más habituales se incluyen por defecto en la distribución de R, y el resto se
encuentran disponibles en CRAN.
8
Introducción a R y RStudio
Para visualizr los paquetes que tenemos instalados seleccionamos la pestaña de Packages,
que se encuentra en el panel inferior derecho de nuestro ambiente de trabajo (Figura 3, panel
4). Los paquetes que se encuentran seleccionados (Figura 4), son aquellos que estan cargados
y listos para usarse. Para utilizar un paquete instalado, es necesario cargarlo. Al iniciar R se
cargan por defecto los paquetes básicos, por ejemplo: graphics y stats, entre otros.
Para cargar un paquete en particular se selecciona la casilla del paquete que queremos utilizar.
Por ejemplo, si queremos usar el paquete ggplot2, marcamos la casilla correspondiente a este
paquete (Figura 5).
9
Introducción a R y RStudio
Para visualizar las funciones contenidas en un paquete, daremos clic en el paquete que
queremos consultar y posteriormente nos mostrará la documentación del paquete. Por ejemplo
si damos clic en ggplot2 nos mostrará sus funciones (Figura 6).
10
Introducción a R y RStudio
Como podemos observar en la Figura 9. La ayuda nos proporciona la descripción del comando
consultado, sus argumentos y ejemplos, entre otra información.
Además, podemos realizar busquedas por aproximación, es decir, poniendo sólo una parte del
término que busacamos o por un tema. Así, se desplegarán todas las páginas de ayuda en
donde aparece dicho término. Por ejemplo, si buscamos el término “clustering” veremos, los
paquetes en los que aparece ese término.
Nota: En el Apéndice 1 se muestran algunos comandos para el Consultando la ayuda desde
línea de comandos.
2.3.1 Ejercicios 1
11
Introducción a R y RStudio
[1] "/home/alumnoX"
12
Introducción a R y RStudio
Desde línea de comandos podemos usar la instrucción setwd( ) y en los parentesis ponemos
la dirección hacia donde queremos movernos.
setwd("/home/alumnoX/R")
[1] "/home/alumnoX/R"
Para consultar el contenido de un directorio, nos movemos al directorio de interés, por medio
del administrador de archivos o desde línea de comandos usamos la instrucción dir( ) y en
los parentesis ponemos la ruta del directorio que queremos consultar. Si dejamos los parentesis
vacíos, nos mostrará el contenido del directorio de trabajo. por ejemplo:
dir()
2.5 Saliendo de R
Para salir de RStudio seleccionamos Quit RStudio de RStudio o Quit Session en File en
el menú principal (Figura 11).
quit()
13
Introducción a R y RStudio
Puedes almacenar los objetos que se crearon en tu sesión en un archivo y después llamarlos,
sin tener que cerrar R. Para almacenar todos los objetos utilizamos los botones y menús que
se encuentran en la pestaña Enviroment en el panel superior derecho de nuestro ambiente
de trabajo (Figura 3, panel 3).
Para ver cómo funciona, crearemos dos objetos y los almacenaremos
x<-5
palabra<-"hola"
Como podemos observar en la sección Enviroment se muestran los objetos que acabamos
de crear (Figura 12). Para guardar todos los objetos en un archivo, con el nombre y ruta
que le especifiquemos, seleccionamos el ícono marcado con 1 en la Figura 12. Por ejemplo,
guardaremos en el archivo “MisObjetos” (en el directorio de trabajo) los objetos creados hasta
el momento.
Si nos movemos al directorio donde guardamos el archivo “MisObjetos”, veremos que por
defecto R coloca la extención “.RData” al archivo.
Para cargar los objetos almacenados en el archivo MisObjetos, utilizamos el ícono marcado
con 2 en la Figura 12 y seleccionamos el archivo que queremos cargar.
En el Apéndice 1 se describe cómo guardar los objetos desde línea de comandos en la sección
Guardando y Cargando el Espacio de Trabajo desde línea de comandos
También podemos guardar el historial de los comandos utilizados en una sesión. Para ello
usaremos los botones de la pestaña History, que se encuentra en el panel superior derecho
de nuestro ambiente de trabajo (Figura 3, panel 3). En la ventana de la pestaña History, se
muestran todos los comandos que hemos escrito en la sesión (Figura 13).
Para guardar los comandos en un archivo, con el nombre y ruta que le especifiquemos,
seleccionamos el ícono marcado con 1 en la Figura 13. Por ejemplo, guardaremos en el archivo
“MisComandos” (en el directorio de trabajo) los comandos utilizados hasta el momento.
Para cargar los comandos almacenados en el archivo MisComandos, utilizamos el ícono
marcado con 2 en la Figura 13 y seleccionamos el archivo que queremos cargar.
14
Introducción a R y RStudio
2.5.3 Ejercicios 2
15
Introducción a R y RStudio
3.1 Variables
Las variables son localidades de memoria a las que les asignamos un nombre para almacenar
un valor que puede cambiar en el transcurso de un programa. La Figura, muestra de manera
esquemática cómo se representan las variables en la memoria.
En R existen 3 maneras de hacer asignaciones de valores a las variables, utilizando los símbolos:
<-, ->, = . Por ejemplo:
A = 3
B <- 125
8 -> Y
Al momento de definir el nombre de una variable debemos tomar en consideración las siguientes
reglas:
16
Introducción a R y RStudio
Notas:
1) Como vimos en el ejemplo anterior, cada comando puede estar en una línea o varios
comandos por línea separados por “;”.
2) Si al escribir un comando damos enter y el comando queda incompleto, entonces, de
manera automática R colocará un símbolo de más (+) indicando que el comando se
encuentra incompleto y permitiendo completarlo. Mientras no se complete el comando,
seguirá apareciendo el símbolo +, cada vez que demos enter.
Si bien es cierto que los nombres de variables pueden contener mayúsculas y minúsculas, es
importante mencionar que, R distingue entre mayúsculas y minúsculas. Por ejemplo:
edad <-3
Edad <-6
EDAD <-25
EdAd <-10
17
Introducción a R y RStudio
Nota: Es importante resaltar que los valores de tipo caracter deben ser delimitados
por comillas simples o dobles, de lo contrario R considera que es el nombre de un
objeto.
x<-5/0
y<-log(-1)
## Warning in log(-1): NaNs produced
3.3.1 Ejercicios 3
18
Introducción a R y RStudio
19
Introducción a R y RStudio
## [1] 81
2 %% 3
## [1] 2
20
Introducción a R y RStudio
3/4/5
## [1] 0.15
Si queremos cambiar el orden en el que se realiza la operación, podemos utilizar los paréntesis.
Es decir, por ejemplo:
# CAmbiando el orden deen que se realizan las operaciones
3/(4/5)
## [1] 3.75
4.1.3 Ejercicios 4
a
+1
b
a+b
c+d
c
(a + b)
d
c + ab
d + ac
21
Introducción a R y RStudio
sqrt(25)
## [1] 5
cos(0)
## [1] 1
log(2)
## [1] 0.6931472
round(3.85)
## [1] 4
abs(48 - 90)
## [1] 42
Los operadores relacionales se utilizan para comparar dos valores. El resultado de la comparación
es de tipo lógico, es decir, toma un valor de Verdadero o Falso. Los operadores relacionales
pueden aplicarse sobre todos los tipos de datos. En la Tabla 3 se muestran los operadores
relacionales.
Cuadro 3: Operadores relacionales
22
Introducción a R y RStudio
5 > 3
## [1] TRUE
5 >= 3
## [1] TRUE
5 != 3
## [1] TRUE
x<- 10
y <- 25
automovil<- "Toyota"
nombre<-"Julia"
x < 50
## [1] TRUE
y >= 32
## [1] FALSE
x == y
## [1] FALSE
nombre != automovil
## [1] TRUE
nombre <= automovil
## [1] TRUE
Los operadores lógicos son usados para evaluar proposiciones lógicas. Las proposiciones son
enunciados aseverativos que pueden ser evaluados en términos de verdadero (TRUE ) o falso
(FALSE ). Los operadores lógicos más utilizados son los que se describen en la Tabla 4..
23
Introducción a R y RStudio
Las modalidades son: ( & ) cumplimiento en forma simultanea de las dos expresiones, para que
el resultado sea verdadero, de lo contrario será falso, ( | ) cumplimiento alternativo, es decir
por lo menos una de las expresiones debe ser verdadera, para que el resultado sea verdadero,
de los contrario será falso. ( ! ) cumplimiento negado, si la expresión se evalua en verdadera
al negarla el resultado será falso y viceversa.
4.3.2.1 Operador and Veamos el uso del operador and con e le siguiente ejemplo. Para
determinar si un valor x se encuentra en el intervalo [5,10], utilizamos el operador (&). Es
decir, para establecer que el valor x se encuentra en el intervalo, éste debe ser mayor o igual a
5 y menor o igual a 10.
knitr::include_graphics("imagenes/IntervaloAnd.png")
4.3.2.2 Operador or Ahora veamos un ejemplo del operador or . En este caso queremos
determinar si el valor x está fuera del intervalo [5,10]. Para saberlo se requiere que el valor de
x sea menor que 5 o mayor que 10.
knitr::include_graphics("imagenes/IntervaloOr.png")
24
Introducción a R y RStudio
Casado<- TRUE
!Casado
## [1] FALSE
4.3.2.3 Operador lógico not Retomando el ejercicio anterior, donde queremos saber si
un valor x está fuera del intervalo [5, 10], es decir, que no pertenece a dicho intervalo. En
este caso podemos utilizar el operador negación.
# Verificar si un número x no se encuentra en el intervalo [5, 10]
x<-15
!((x >= 5) & (x <= 10))
## [1] TRUE
x
## [1] NA
y
## [1] NaN
x == NA
## [1] NA
y != NA
## [1] NA
Para identificar si los objeto x o y contienen un valor perdido, utilizamos las funciones is.na o
is.nan. Por ejemplo:
25
Introducción a R y RStudio
is.na(x)
## [1] TRUE
is.nan(y)
## [1] TRUE
is.nan(x)
## [1] FALSE
is.na(5)
## [1] FALSE
4.5 Ejercicios 5
1. Escribir la expresión necesaria para evaluar si el valor almacenado en la variable x,
coincide con alguno de una serie de valores, por ejemplo 2, 7 y 9.
2. Escribir la expresión necesaria para evaluar si el valor almacenado en la variable no
coincide con alguno de una serie de valores, por ejemplo 2, 7 y 9
3. Escribe una expresión lógica que compruebe si una variable contiene un valor par. Nota:
el operador % % devuelve el resto de la división entera.
4. Intenta predecir el resultado de evaluar las siguientes expresiones lógicas. Piensa en el
orden en que se evalúan las subexpresiones dentro de cada expresión. Los valores de las
variables son: a <- TRUE, b <- TRUE, c <- FALSE, d <- FALSE.
a. c || !a && b
b. ! (a || c) || b && !c
c. ! (! (! (a && c || d)))
d. !(5<3) && a || !(d || c)
Las respuestas se encuentran disponibles en: Solución Ejercicios 5
26
Introducción a R y RStudio
5 Vectores
Un vector en R, es esencialmente una lista ordenada de elementos, donde todos los elementos
son del mismo tipo (enteros, caracteres, . . . ) y se encuentran agrupados bajo un mismo
nombre. La función más utilizada para generar un vector, es c( ) (de combine). Datos
simples como un valor numérico son en realidad un vector. Por ejemplo:
3
## [1] 3
En este caso, un vector de tipo numérico y de longitud igual a 1. Para verificar si un valor es
un vector, utilizamos la función is.vector().
is.vector(3)
## [1] TRUE
# Vector de cadenas
nombres<-c("Ana","Luis","Juan","Paty","Jair","Mary")
# Vector logico
casado<-c(TRUE,FALSE,TRUE,FALSE)
Para ver los valores de los vectores que acabamos de crear, tecleamos el nombre del vector,
por ejemplo:
edades
## [1] 25 8 52 18 0 93
27
Introducción a R y RStudio
vec_3<-c(vec_2,vec_2)
vec_3
## [1] 9 8 7 9 8 7
# Secuncia de -20 a 10
-5:3
## [1] -5 -4 -3 -2 -1 0 1 2 3
28
Introducción a R y RStudio
# Elementos no consecutivos
edades[c(1,3,6)]
## [1] 25 52 93
# Elementos consecutivos
edades[2:5]
## [1] 8 52 18 0
Para excluir algunos elementos del vector, utilizamos el signo menos( - ). Por ejemplo:
# Para excluir algún elemento
edades[-c(3)]
## [1] 25 8 18 0 93
edades[-c(1,3)]
## [1] 8 18 0 93
29
Introducción a R y RStudio
30
Introducción a R y RStudio
## 25 8 52 18 0 93
Si queremos visualizar, solamente los elementos que cumplen la condición entonces utilizamos
la siguiente expresión:
# Visualizando el contenido de edades
edades
## Ana Luis Juan Paty Jair Mary
## 25 8 52 18 0 93
Nota: Las matrices son objetos de dos dimensiones que contienen renglones y
columnas. Al igual que en el caso de los vectores en las matrices sólo podemos
almacenar datos del mismo tipo (por ejemplo numéricos o caracteres).
5.9 Ejercicios 6
1. Para cada una de las siguientes asignaciones, indica, de qué tipo es el vector resultante:
a. N<-c(5,“cinco”)
b. Solucion<- c(TRUE,FALSE,TRUE)
c. Res<-(uno,1)
2. Genere un vector con las mediciones del tamaño (superficie), de por lo menos 5 planetas
diferentes.
a. Agregue los nombres a cada planeta usando la función names.
b. Calcule del tamaño el: promedio, mínimo y máximo.
c. Agregue dos planetas más, junto con sus datos de superficie.
31
Introducción a R y RStudio
3. Escribe una expresión que simule el lanzamiento de una moneda 10 veces. Obtén como
resultado de la expresión un vector de valores “cara” y “cruz”. Cuenta las ocurrencias
de cara y cruz, y la proporción de cada valor. Tip, revise la función sample.
4. Crea un vector aleatorio de 10 elementos y selecciona aquellos elementos del vector que
ocupan índices impares. Usa seq para expresar el vector de índices impares y la función
rnorm para generar los números aleatorios.
Las respuestas se encuentran disponibles en: Solución Ejercicios 6
6 Factores
Los factores son variables categóricas que pueden ser numéricas o de tipo carácter. Un ejemplo
clásico de una variable categórica es el “genero”, ya que sólo toma dos valores: “femenino”
o “masculino”. Para crear un objeto de tipo factor se utiliza la función factor( ) sobre un
vector. Por ejemplo:
Tejidos <- factor(c("higado","pancreas","higado","pancreas","higado"))
Tejidos
## [1] higado pancreas higado pancreas higado
## Levels: higado pancreas
Experimentos <- factor(c("WT","Control","Control","WT","WT","Control"))
Experimentos
## [1] WT Control Control WT WT Control
## Levels: Control WT
Como podemos observar levels contiene las diferentes categorías del factor. A cada categoría
R le asigna un número identificador por orden alfabético. Para ver las categorías de un objeto
tipo factor se utiliza el comando levels(). Por ejemplo:
levels(Tejidos)
## [1] "higado" "pancreas"
7 Dataframes
Los dataframe son objetos de dos dimensiones que contienen renglones y columnas. Este tipo
de objeto es muy similar a las matrices, pero su princial diferencia es que los dataframe pueden
almacenar diferentes tipos de datos, es decir, cada columna puede ser de un tipo distinto. En
32
Introducción a R y RStudio
asegurados<-data.frame(edades=c(25,8,52,18,0,93),
nombres=c("Ana","Luis","Juan","Paty","Jair","Mary"),
casado=c(TRUE,FALSE,TRUE,FALSE,FALSE,FALSE))
asegurados
## edades nombres casado
## 1 25 Ana TRUE
## 2 8 Luis FALSE
## 3 52 Juan TRUE
## 4 18 Paty FALSE
## 5 0 Jair FALSE
## 6 93 Mary FALSE
Como podemos observar, la primera columna del dataframe contiene valores numéricos
consecutivos, estos valores representan los nombres de cada uno de los renglones (los cuales
deben ser valores únicos, es decir, no puede haber nombres repetidos). Si al momento de
generar el dataframe, los nombres de los renglones no son proporcionados, por default se
asignaran valores numéricos. Para poner nombres al momento de generar el dataframe,
agregamos el parámetro row.names, Por ejemplo:
asegurados<-data.frame(edades=c(25,8,52,18,0,93),
nombres=c("Ana","Luis","Juan","Paty","Jair","Mary"),
casado=c(TRUE,FALSE,TRUE,FALSE,FALSE,FALSE),
row.names=c("10-20","15-30","10-18","10-09","15-12","12-32"))
asegurados
## edades nombres casado
## 10-20 25 Ana TRUE
## 15-30 8 Luis FALSE
## 10-18 52 Juan TRUE
## 10-09 18 Paty FALSE
## 15-12 0 Jair FALSE
## 12-32 93 Mary FALSE
33
Introducción a R y RStudio
34
Introducción a R y RStudio
Las columnas del dataframe pueden ser accedidas de manera individual de tres formas
diferentes.
1) Utilizando el símbolo $ y el nombre de la columna que queremos extraer, si nosotros no
le asignamos de manera explicita nombres a las columnas, R les asigna V1, V2, . . . , de
manera automática. Pero para estar seguros cómo se llaman las columnas utilizamos el
comando names(nombre_del_dataframe) y no aparecerá el nombre de cada columna.
Consultemos los nombres de nuestro dataframe asegurados.
names(asegurados)
## [1] "edades" "nombres" "casado"
35
Introducción a R y RStudio
Como podemos observar al querer realizar operaciones numéricas (max, min, rowSums, col
Sums) sobre todo el dataframe nos marca un error, debido a que algunas de sus columnas no
son de tipo numérico. En ete caso se pueden seleccionar sólo las columnas numéricas donde
se aplicacrán dichos operadores.
Es decir, colocamos en corchetes la condición, indicando que queremos los valores de los
elementos que cumplen esa condición.
36
Introducción a R y RStudio
7.4 Ejercicios 7
1. Con los siguientes vectores, genere un dataframe, llamado planetas.
name = c("Mercury", "Venus", "Earth", "Mars", "Jupiter", "Saturn", "Uranus", "Neptune")
type = c("Terrestrial planet", "Terrestrial planet","Terrestrial planet",
"Terrestrial planet", "Gas giant","Gas giant", "Gas giant", "Gas giant")
diameter = c(0.382, 0.949, 1, 0.532, 11.209, 9.449, 4.007,3.883)
rotation = c(58.64, -243.02, 1, 1.03, 0.41, 0.43, -0.72, 0.67)
rings = c(FALSE, FALSE, FALSE, FALSE, TRUE, TRUE, TRUE,TRUE)
8 Lectura de archivos
Para lectura y escritura de archivos R utiliza por defecto el directorio de trabajo, a menos
que le digamos de manera explicita la dirección donde se leerán o escribirán los archivos.
Recordemos que si queremos saber en qué directorio estamos, utilizamos el comando getwd,
que vimos en la sección ¿Cuál es mi directorio de trabajo? y para cambiar de directorio, lo
haremos con el comando setwd, que vimos en la sección ¿Cómo cambio de directorio?.
Con R podemos leer archivos de texto (ASCII) utilizando las siguientes funciones:
• read.table (que tiene algunas variantes)
• scan
Se pueden leer otro tipo de formatos como son Excel, SPSS, entre otros, pero las funciones
que se necesitan para la lectura de estos archivos no vienen dentro del paquete básico de R,
se requiere la instalación de otros Paquetes de R.
37
Introducción a R y RStudio
## Description:
##
## Reads a file in table format and creates a data frame from it,
## with cases corresponding to lines and variables to fields in the
## file.
##
## Usage:
##
## read.table(file, header = FALSE, sep = "", quote = "\"'",
## dec = ".", numerals = c("allow.loss", "warn.loss", "no.loss"),
## row.names, col.names, as.is = !stringsAsFactors,
## na.strings = "NA", colClasses = NA, nrows = -1,
## skip = 0, check.names = TRUE, fill = !blank.lines.skip,
## strip.white = FALSE, blank.lines.skip = TRUE,
## comment.char = "#",
## allowEscapes = FALSE, flush = FALSE,
## stringsAsFactors = default.stringsAsFactors(),
## fileEncoding = "", encoding = "unknown", text, skipNul = FALSE)
Una vez que visualizamos el archivo podemos seleccionar los parámetros necesarios para leerlo,
para leer el archivo utilizaríamos la siguiente instrucción:
countTable<-read.table("/Data/conteos.txt",sep = "\t", header = T, row.names = 1)
38
Introducción a R y RStudio
39
Introducción a R y RStudio
9 Escritura de archivos
La escritura de datos a un archivo se realiza por medio de dos funciones:
• write.table y las variantes write.csv y write.csv2
• write
Usage:
write.table(x, file = "", append = FALSE,quote = TRUE, sep = " ",* eol = "\n", na
= "NA", dec = ".", row.names = TRUE, col.names = TRUE, qmethod = c("escape", "dou
ble"), fileEncoding = "")
Los parámetros más utilizados son los que se encuentran en letras itálicas:
sep: Para indicar el tipo de separador
40
Introducción a R y RStudio
Por ejemplo, utilizando el objeto countTable, que leímos anteriormente, eliminaremos los
renglones de ceros y guardaremos los resultados en un archivo llamado conteosSinCeros.txt,
utilizando la función write.table.
Primero verificaremos cuántos renglones tiene el objeto countTable, posteriormente elimi-
nemos los renglones con ceros y veremos con cuántos renglones nos quedamos. Finalmente,
guardaremos los resultados en el archivo.
# Verificando el número de renglones
nrow(countTable)
## [1] 20259
write.table(countTableSinCeros,"conteosSinCeros.txt",quote=FALSE,sep="\t")
9.3 Ejercicios 8
1. Utilizando la función write.table, almacene en un archivo el objeto planetas, creado
en Ejercicios 7.
La respuesta se encuentran disponibles en: Solución Ejercicios 8
41
Introducción a R y RStudio
podría indicar que se esta haciendo la pregunta incorrecta o que se requiere una nueva
recolección de datos. Las representaciones gráficas pueden ser sorprendentes, sin embargo,
siempre requieren a un ser humano para su interpretación.
R es un herramienta muy potente para el análisis estadístico de datos y la graficación. Existen
diversos paquetes para graficar, tres de los más utilizados son:
• Graphics
• lattice
• ggplot2
En este curso, nos centraremos en ggplot2, que es muy potente y versátil para realizar gráficos
con calidad para publicación.
En este sentido, las capas inferiores están obscurecidas por las capas superiores, permitiendo
mezclar, enmascarar y superponer objetos. Es importante mencionar que no se pueden deshacer
las operaciones que se realizan a la gráfica, es necesario volver a ejecutar el código desde cero.
42
Introducción a R y RStudio
Con ggplot se pueden generar diversos tipos de gráficos, como son los gráficos de barras, de
puntos, de líneas, entre otros. Para hacer una consulta de estos gráficos se puede revisar las
hojas de consulta rápida (“cheatsheet”), que se encuentran en el sitio de RStudio en la
sección Resorces (https://www.rstudio.com/resources/cheatsheets/)
install.package(“tidyverse”, dependencies=TRUE)
2. Instalando solo ggplot2
install.package(“ggplot2”, dependencies=TRUE)
43
Introducción a R y RStudio
Sin embargo, para este curso utilizaremos el conjunto de datos [msleep], el cual se encuentra
por defecto en el paquete de ggplot2.
El data.frame contienen un conjunto de datos con los habitos de sueño de diversos
mamíferos, los cuales están bsados en artículo “A quantitative, theoretical framework
for understanding mammalian sleep”, de V. M. Savage y G. B. West. Proceedings of
the National Academy of Sciences, 104 (3):1051-1056, 2007.
Una vez cargado el paquete de ggplot2, podemos visualizar el conjunto de datos msleep y
verificar los nombres de las columnas y el número de renglones y columnas.
• ¿Cuántas columnas y renglones tiene?
• ¿Cuáles son los nombres de las columnas?
# Obtener número de renglones y columnas.
dim(msleep)
## [1] 83 11
44
Introducción a R y RStudio
Para visualizar el significado de cada una de las columnas del conjunto de datos msleep,
podemos utilizar la ayuda.
# Obtener la descripcion del conjunto msleep
help(msleep)
## Usage
##
## msleep
##
## Format
##
## A data frame with 83 rows and 11 variables:
##
## name
## common name
## genus
## vore
## carnivore, omnivore or herbivore?
## order
## conservation
## the conservation status of the animal
## sleep_total
## total amount of sleep, in hours
## sleep_rem
## rem sleep, in hours
## sleep_cycle
## length of sleep cycle, in hours
## awake
## amount of time spent awake, in hours
## brainwt
## brain weight in kilograms
## bodywt
## body weight in kilograms
Para este taller solo utilizaremos el comando ggplot(). Recoredemos cómo es la gramática
de las gráficas.
45
Introducción a R y RStudio
ggplot(data = msleep,
aes(x = bodywt, y = sleep_total)) +
geom_point()
20
15
sleep_total
10
podemos omitir el data= y solo poner el nombre del data.frame donde se encuentran los datos.
ggplot(msleep,
aes(x = bodywt, y = sleep_total)) +
geom_point()
46
Introducción a R y RStudio
20
15
sleep_total
10
Por otra parte, ¿Qué sucede si quitamos la geometría de alguna de las instrucciones anteriores?
ggplot(msleep,
aes(x = bodywt, y = sleep_total))
20
15
sleep_total
10
No graficaría los datos, dado que no le dijimos cómo hacerlo, en este sentido, es importante
mencionar que llamar sólo a la función ggplot no es suficiente para dibujar una figura.
Necesitamos decirle a ggplot cómo queremos representar visualmente los datos, por eso
agregamos la capa geom.
10.8 Ejercicios 9
1. De los datos DNase, que vienen en las bases de datos de R:
47
Introducción a R y RStudio
• Explore los datos del dataframe, ¿cuántas columnas y renglones tiene?, ¿qué
describe cada dato?
• Grafique la densidad (en el eje de las y) vs.la concentración.
La respuesta se encuentran disponibles en: Solución Ejercicios 9
10.9.1 Color
Por ejemplo, podemos cambiar la estética de los puntos en términos del color. Modifica-
remos el código de ejercicio anterior para colorear los puntos de acuerdo al tipo de alimentación
(vore) de los animales.
# Como vore contiene NA´s, filtramos primero los renglones con NA`s
keep_rows <- !(is.na(msleep$vore))
# Graficando en colores los puntos
ggplot(msleep[keep_rows, ], aes(x = bodywt, y = sleep_total,
color = vore)) +
geom_point()
20
15
vore
sleep_total
carni
herbi
10 insecti
omni
¿Qué sucede si queremos cambiar el color de todos los puntos a azul? ¿Cómo lo haríamos?
Podríamos pensar en agregar color = "blue" en la estética de los puntos. ¿Funcionaría?
# Graficando en colores los puntos
ggplot(msleep, aes(x = bodywt, y = sleep_total,
48
Introducción a R y RStudio
color = "blue")) +
geom_point()
20
15
sleep_total
colour
blue
10
¿Por qué no funciona? Porque el color no está asociado a ninguna variable, es decir es un valor
constante, por lo tanto simplemente movemos la especificación de color fuera de cualquier
función aes y colocamos la especificación de color de manera local en geom_point, como se
muestra a continuación:
# Graficando en colores los puntos
ggplot(msleep, aes(x = bodywt, y = sleep_total)) +
geom_point(color="blue")
20
15
sleep_total
10
49
Introducción a R y RStudio
colors()
Otros niveles (“levels”) que podemos modificar en la estética son el tamaño, la transparencia
y la forma. Para modificar el tamaño usamos size, para modificar la transparencia utilizamos
alpha y para modificar la forma utilizamos shape. Las modificaciones las podemos realizar:
• De manera constante
• Asociado a los valores de una variable
Cambiemos ahora el tamaño de los puntos en función del peso del cerebro de los animales
(brainwt). Dado que es un valor que está asociado a una variable, colocamos el parámetro
size dentro de la función aes.
20
brainwt
1
15 2
3
4
sleep_total
10 vore
carni
herbi
insecti
omni
5
Ahora cambiemos la transparencia de los puntos de una forma constante. Dado que es un
valor constante, no está asociado a alguna variable, por lo tanto este nivel queda de manera
local dentro de la geometría.
keep_rows <- !is.na(msleep$vore) & !is.na(msleep$brainwt)
ggplot(data = msleep[keep_rows, ],
aes(x = bodywt, y = sleep_total,
color = vore, size = brainwt)) +
geom_point(alpha=0.5)
50
Introducción a R y RStudio
20
brainwt
1
15 2
3
4
sleep_total
10 vore
carni
herbi
insecti
omni
5
20
brainwt
1
15 2
3
4
sleep_total
10 vore
carni
herbi
insecti
omni
5
Los símbolos de las formas tienen asociado un valor numérico. En la siguiente Figura se
muestra los diversos símbolos. En este sentido podemos cambiar el valor de la forma a un
valor constate asociado a un símbolo determinado.
51
Introducción a R y RStudio
Por defecto cuando agregamos color a la gráfica los colores que se ponen ya están establecidos,
lo mismo pasa con la forma, ya está definida. Sin embargo, podemos modificar estos valores,
por medio de las siguientes capas:
1. scale_color_manual y
2. scale_shape_manual
Por ejemplo:
# Como vore contiene NA´s, filtramos primero los renglones con NA`s
keep_rows <- !(is.na(msleep$vore))
# Graficando en colores los puntos
ggplot(msleep[keep_rows, ], aes(x = bodywt, y = sleep_total,
color = vore)) +
geom_point() +
scale_color_manual(values=c("blue","olivedrab","red","pink"))
52
Introducción a R y RStudio
20
15
vore
sleep_total
carni
herbi
10 insecti
omni
Recordemos que cada forma tiene un valor numérico asociado. Por lo tanto podemos establecer
los símbolos de acuerdo a dicho valor numérico. Por ejemplo:
keep_rows <- !is.na(msleep$vore) & !is.na(msleep$brainwt)
ggplot(data = msleep[keep_rows, ],
aes(x = bodywt, y = sleep_total,
color = vore, shape = vore)) +
geom_point( ) +
scale_color_manual(values=c("blue","olivedrab","red","pink")) +
scale_shape_manual(values=c(0,1,2,3))
20
15
vore
sleep_total
carni
herbi
insecti
10
omni
53
Introducción a R y RStudio
10.10 Ejercicios 10
1. De la gráfica que realizamos en Ejercicios 9, cambiar el color de los puntos con base en
la columna Run. Además, colocar un símbolo distinto al punto y cambiar la transparencia
a 0.4.
Solución Ejercicios 10
20
15
vore
sleep_total
carni
herbi
10 insecti
omni
Recordemos que cada capa se dibuja encima de la capa anterior. En este ejemplo, los puntos se
han dibujado sobre las líneas. Para visualizar mejor el orden de pintado de las capas, sacaremos
de las opciones globales el color.
keep_rows <- !(is.na(msleep$vore))
ggplot(data = msleep[keep_rows, ],
aes(x = bodywt, y = sleep_total)) +
geom_line(aes(color=vore)) +
geom_point(color="grey40", shape=8,size=2)
54
Introducción a R y RStudio
20
15
vore
sleep_total
carni
herbi
10 insecti
omni
20
15
10
sleep_total
55
Introducción a R y RStudio
También podemos cambiar el modelo de ajuste, por ejemplo podemos poner un ajuste lineal y
eleiminar el sombreado gris que representa el error estándar. Por ejemplo:
ggplot(data = msleep,
aes(x = bodywt, y = sleep_total)) +
geom_point() +
scale_x_log10() +
geom_smooth(mthod="lm", se=FALSE)
## Warning: Ignoring unknown parameters: mthod
## `geom_smooth()` using method = 'loess' and formula 'y ~ x'
20
15
sleep_total
10
10.13 Ejercicios 11
1. De los datos de msleep, graficar la relación que existe entre las caracteríticas bodywt
y awake, colorear los puntos con base en la característica vore y agregar la línea de
tendencia (geom_smooth) general, es decir para todos los puntos.
2. Definir el tamaño de los puntos, con base a la característica sleep_cycle.
56
Introducción a R y RStudio
10.14.1 facet_grid()
Es decir, en los renglones colocamos una caracterítica, por ejemplo, el tipo de alimentación
vore de los animales, mientras que en las columnas colocamos la conservación conservation.
Y graficaremos en cada panel la relación que hay entre bodywt y la sleep_total.
keep_rows <- !(is.na(msleep$vore)) & !(is.na(msleep$conservation))
ggplot(data = msleep[keep_rows, ],
aes(x = bodywt, y = sleep_total)) +
geom_point( ) +
facet_grid(vore ~ conservation)
cd domesticated en lc nt vu
20
15
carni
10
20
15
herbi
10
sleep_total
20
15
insecti
10
20
15
omni
10
0 2000 4000 6000 0 2000 4000 6000 0 2000 4000 6000 0 2000 4000 6000 0 2000 4000 6000 0 2000 4000 6000
bodywt
Para dividir la gráfica en relación a una sola variable eliminamos uno de los primeros argumentos
de la función facet_grid, dependiemdo de cómo queremos la gráfica: en renglones o columnas.
Para excluir una de las variables, la remplazamos con un punto(.). Por ejemplo, dejemos solo
la carcterística vore, en la sección de las columnas.
keep_rows <- !(is.na(msleep$vore))
ggplot(data = msleep[keep_rows, ],
aes(x = bodywt, y = sleep_total)) +
geom_point( ) +
facet_grid(. ~ vore)
57
Introducción a R y RStudio
20
15
sleep_total
10
0 2000 4000 6000 0 2000 4000 6000 0 2000 4000 6000 0 2000 4000 6000
bodywt
10.15 Ejercicios 12
1. De los datos DNase, que vienen en las bases de datos de R:
• Hacer una grafica en múltiples paneles para visualizar la relación que existe entre
la densidad (en el eje de las y) vs.la concentración (eje de las x), para las corridas
1 a 4.
La respuesta se encuentran disponibles en: Solución Ejercicios 12
labs es la capa que controla las etiquetas de los ejes, el título (title) del gráfico y el subtítulo
(subtitle). Por ejemplo, colocaremos un título a la gráfica.
keep_rows <- !(is.na(msleep$vore))
ggplot(data = msleep[keep_rows, ],
aes(x = bodywt, y = sleep_total,
color = vore)) +
geom_point( ) +
labs(title="Relación entre el peso y las horas de sueño")
58
Introducción a R y RStudio
15
vore
sleep_total
carni
herbi
10 insecti
omni
Dentro de la misma instrucción podemos modificar los títulos de los ejes (x , y) o podemos
agregar otra capa labs con esta información. Incluso podemos agregar un subtítulo (subtitle).
Por ejemplo:
keep_rows <- !(is.na(msleep$vore))
ggplot(data = msleep[keep_rows, ],
aes(x = bodywt, y = sleep_total,
color = vore)) +
geom_point( ) +
labs(title="Relación entre el peso y las horas de sueño",
subtitle="El peso está definido en Kg",
x="Peso del animal", y="Horas de sueño")
20
15
vore
Horas de sueño
carni
herbi
10 insecti
omni
59
Introducción a R y RStudio
theme permite controlar diversos aspectos de la gráfica como son fuentes (tamaño, color,
estilo, entre otros), marcas, franjas de paneles, grid y fondo. theme ayuda a hacer que la
trama sea estéticamente agradable o que coincida con una guía de estilo existente.
El theme tiene 2 componentes:
1. Los elementos del tema
2. La función del elemento
Por ejemplo, vamos a cambiar el tipo de letra, color y ajuste, del título principal de la gráfica,
accediendo al elemento plot.title.
60
Introducción a R y RStudio
20
15
vore
Horas de sueño
carni
herbi
10 insecti
omni
Como podemos observar, no se modificó el estilo del subtítulo. Para modificarlo accedemos al
elemento plot.subtitle
keep_rows <- !(is.na(msleep$vore))
ggplot(data = msleep[keep_rows, ],
aes(x = bodywt, y = sleep_total,
color = vore)) +
geom_point( ) +
labs(title="Relación entre el peso y las horas de sueño",
subtitle="El peso está definido en Kg",
x="Peso del animal", y="Horas de sueño") +
theme(plot.title=element_text(face="bold",family="Times",
colour="red",size=14,hjust = 0.5),
plot.subtitle=element_text(face="italic",color="blue",
size=12,hjust = 0.5))
61
Introducción a R y RStudio
15
vore
Horas de sueño
carni
herbi
10 insecti
omni
Dentro de las funciones de los elementos, tenemos element_blank, que nos permite quitar
algún elemento. Por ejemplo, podemos quitar los textos del eje x, accediendo al elemento
axis.text.x.
20
15
vore
sleep_total
carni
herbi
10 insecti
omni
bodywt
62
Introducción a R y RStudio
font_import()
fonts()
fonttable()[20:30,]
10.17.1 Ejercicios 13
ggplot2 tiene por defecto diversos temas. El “tema” básico de fondo que, ggplot2, pone por
defecto es el theme_gray, sin embargo, se puede cambiar la apariencia de las tramas utilizando
alguno de los siguientes temas definidos.
1. theme_gray()
2. theme_bw()
3. theme_minimal()
4. theme_classic()
5. theme_void()
Haremos una gráfica de puntos, con la relación del peso y las horas totales de sueño, y vamos
a utilizar el ‘theme_bw, como una capa dentro de nuestra gráfica, para cambiar el fondo.
keep_rows <- !(is.na(msleep$vore))
ggplot(data = msleep[keep_rows, ],
aes(x = bodywt, y = sleep_total,
color = vore)) +
geom_point( ) +
labs(title="Relación entre el peso y las horas de sueño",
subtitle="El peso está definido en Kg",
63
Introducción a R y RStudio
20
15
vore
Horas de sueño
carni
herbi
10 insecti
omni
Por otra parte, podemos modificar las características de la gráfica, de forma perzonalizada,
en términos del fondo y las líneas divisorias (grid), entre otras. Para consultar cómo realizar
estos cambios, revisar la sección de Apéndice 4
10.19 Ejercicios 14
1. De la gráfica generada en Ejercicios 13, cambiar el tema utilizando algún tema por
defecto, para cambiar la apriencia de la gráfica.
2. Generar un tema perzonalizado, que puedas utilizar en tus gráficas. Puedes modificar,
por ejemplo, el color de fondo el color y ancho del borde, entre otras. Aplicar este tema
a alguna gráfica
La respuesta se encuentran disponibles en: Solución Ejercicios 14
64
Introducción a R y RStudio
10.20.1 Histogramas
Los histogramas de frecuencia sirven para obtener una “primera vista” general, o panorama,
de la distribución de los datos, respecto a una característica en particular. Para graficar datos
en un histograma, utilizamos la geometría geom_histogram. Por ejemplo, grafiquemos en un
histograma, cómo se distribuye la variable awake de los animales.
Para graficar datos en un histograma, utilizamos la geometría geom_histogram. Por ejemplo,
grafiquemos en un histograma, cómo se distribuye la variable awake de los animales.
ggplot(data = msleep, aes(awake)) +
geom_histogram( )
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
65
Introducción a R y RStudio
4
count
5 10 15 20
awake
Sino se especifica alguno de ellos, entonces se utiliza bins por defaul, con un valor de 30.
Podemos cambiar la estética de la gráfica. Por ejemplo el color de las barras, utilizando los
parámetros fill y color.
ggplot(data = msleep, aes(awake)) +
geom_histogram(fill="green",color="red" )
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
4
count
5 10 15 20
awake
66
Introducción a R y RStudio
vore
carni
4
count
herbi
insecti
omni
NA
5 10 15 20
awake
67
Introducción a R y RStudio
20
15
awake
10
20
vore
15
carni
awake
herbi
insecti
omni
10
Ademas, podemos agregar una capa más con la distribución de los puntos, con geom_jitter.
68
Introducción a R y RStudio
20
vore
15
carni
awake
herbi
insecti
omni
10
12
8
brainwt
Podemos agregar un color constante al fill de las barras, por ejemplo, le pondremos el
color “cyan4”.
69
Introducción a R y RStudio
12
8
brainwt
Por otra parte podemos asociar el color a alguna característica, por ejemplo, a la caracte-
rística vore, para el fill de las barras.
keep_rows <- !(is.na(msleep$brainwt)) & !(is.na(msleep$vore)) &
!(is.na(msleep$conservation))
ggplot(data = msleep[keep_rows, ],aes(x=vore,y=brainwt,
fill=conservation)) +
geom_bar(stat="identity")
12
8 conservation
domesticated
brainwt
en
lc
nt
vu
4
El parámetro dodge permite que las barras queden una junto a otra.
70
Introducción a R y RStudio
4
conservation
domesticated
brainwt
en
lc
nt
2 vu
10.23 Ejercicios 15
1. Con los datos de DNase, realiza un histograma de frecuencias, para visualizar la
distribución de los valores de la característica density. Dale formato a las barras y a
la gráfica en general, en términos del color de las barras, el tema de la gráfica y las
leyendas de la misma.
2. Con los datos de msleep realiza una grafica de barras o un boxplot, para visualizar las
horas que los animales permanecen despiertos (awake, en eje de las y) vs el tipo de
alimentación(vore, eje de las x). Dale formato a la gráfica y en el caso del boxplot
agrega la distribución de los puntos con la capa geom_jitter.
La respuesta se encuentran disponibles en: Solución Ejercicios 15
Por default ggsave, guarda la última gráfica generada, a menos que le indiquemos lo contrario.
Por ejemplo, si sólo escribo:
71
Introducción a R y RStudio
ggsave("results/miGrafica.pdf")
## Saving 8 x 5 in image
guardará la imágen de la última gráfica de barras que realizamos y por la extensión proporcio-
nada del arhivo, la guardará en formato pdf.
Podemos también especificar qué gráfica queremos guardar, siempre y cuando la gráfica se
haya almacenado en una variable. Por ejemplo,
keep_rows <- !(is.na(msleep$vore))
gf1<-ggplot(data = msleep[keep_rows, ], aes(x=vore, y=awake,
fill=vore)) +
geom_boxplot() +
geom_jitter(size=0.7, color="grey50") +
theme_bw()
ggsave("results/miBoxplot.pdf",plot=gf1)
## Saving 8 x 5 in image
Por otra parte podemos guardar nuestras gráficas utilizando las instrucciones básicas de
R, como las que se muestran a continuación, acompañadas de dev.off().
• pdf()
• png()
• tiff()
• jpeg()
Por ejemplo:
pdf("results/migrafica4.pdf")
ggplot(msleep, aes(x = bodywt, y = sleep_total)) +
geom_point() +
theme_bw()
dev.off()
## pdf
## 2
72
Introducción a R y RStudio
Nota: Es importante, colocar siempre el **```dev.off()```**, para hacer el cierre del archivo que acabamos de
10.25 Ejercicios 16
1. Lea el archivo BacterialGrow.csv (sus campos estan separados por comas, no por
tabuladores)
a. Grafica el crecimiento de las diferentes bacterias vs el tiempo, en una gráfica de líneas.
Ponga color a las líneas en términos de la clase de bacteria.
b. Poner títulos a los ejes y a la gráfica. Además, de cambiar el estilo del texto de las
leyendas, en términos del tipo de letra y color de la misma.
c. Cambia el “tema”, por alguno de los definidos, que no sea theme_ gray() o genera tu
propio “tema”.
d. Guarda la imagen en un archivo.
2. Guarda las imagenes generadas en los ejercicios anteriores, trata de utilizar los parámetros
width, height, res y dpi.
La respuesta se encuentran disponibles en: Solución Ejercicios 8
11 Respuestas de Ejercicios
11.1 Solución Ejercicios 1
1. Busca qué hace la función rm
?rm
73
Introducción a R y RStudio
args(rep)
## function (x, ...)
## NULL
stats::predict
modelr::add_predictions
locfit::predict.locfit
Regresar a Ejercicios 1
Abrir una terminal, moverse al directorio de trabajo, y con el comando ls -a listamos los
archivos ocultos en Unix.
2. ¿Cómo veo el contenido del archivo .Rhistory?
Los archivos ocultos .RData y .Rhistory se crean en el directorio de trabajo (el último definido,
por el usuario)
4. ¿Por qué se crearon ahí?
Los archivos ocultos .RData y .Rhistory se crean siempre en el directorio de trabajo (actual).
Regresar a Ejercicios 2
Regresar a Ejercicios 3
74
Introducción a R y RStudio
a+b
c+d
(a+b)/(c+d)
c
(a + b)
d
(a+b)*(c/d)
75
Introducción a R y RStudio
c + ab
d + ac
(c+b/a)/(d+a/c)
Regresar a Ejercicios 4
3. Escribe una expresión lógica que compruebe si una variable contiene un valor par. Nota:
el operador % % devuelve el resto de la división entera.
(y %% 2) == 0
## [1] NA
Regresar a Ejercicios 5
76
Introducción a R y RStudio
2. Genere un vector con las mediciones del tamaño (superficie), de por lo menos 5 planetas
diferentes.
planetas<-c(74.8, 510.1, 42.7, 144.8, 7618)
3. Escribe una expresión que simule el lanzamiento de una moneda 10 veces. Obtén como
resultado de la expresión un vector de valores “cara” y “cruz”. Cuenta las ocurrencias
de cara y cruz, y la proporción de cada valor. Tip, revise la función sample.
experimento <- sample(c("cruz", "cara"), size = 10, replace = TRUE)
experimento
## [1] "cruz" "cara" "cara" "cruz" "cara" "cruz" "cruz" "cruz" "cruz" "cruz"
cara<-experimento[experimento == "cara"]
num_cara<-length(cara)
num_cara
## [1] 3
num_cruz<-10 - num_cara
num_cruz
## [1] 7
4. Crea un vector aleatorio de 10 elementos y selecciona aquellos elementos del vector que
ocupan índices impares. Usa seq para expresar el vector de índices impares y la función
rnorm para generar los números aleatorios.
vectNum<-rnorm(10)
vectNum
## [1] 1.1657473 -0.1063841 1.7446083 1.0146729 0.6099442 -0.5856691
## [7] 1.5574157 -1.1697411 0.2199812 0.2064737
vectNum[seq(1,10, by=2)]
## [1] 1.1657473 1.7446083 0.6099442 1.5574157 0.2199812
Regresar a Ejercicios 6
77
Introducción a R y RStudio
planetas
## name type diameter rotation rings
## 1 Mercury Terrestrial planet 0.382 58.64 FALSE
## 2 Venus Terrestrial planet 0.949 -243.02 FALSE
## 3 Earth Terrestrial planet 1.000 1.00 FALSE
## 4 Mars Terrestrial planet 0.532 1.03 FALSE
## 5 Jupiter Gas giant 11.209 0.41 TRUE
## 6 Saturn Gas giant 9.449 0.43 TRUE
## 7 Uranus Gas giant 4.007 -0.72 TRUE
## 8 Neptune Gas giant 3.883 0.67 TRUE
mean(planetas$diameter)
## [1] 3.926375
mean(planetas[,4])
## [1] -22.695
78
Introducción a R y RStudio
##
##
b. Los planetas que tengan anillos (rings) y que el valor de rotación (rotation) sea menor
o igual 0.5
# Obteniendo primero los renglones que cumplen la condición
keepPlanetas <- (planetas$rings == TRUE) & (planetas$rotation <= 0.5)
# Consultando la información de los renglones que cumplieron la condición
planetas[keepPlanetas, ]
## name type diameter rotation rings
## 5 Jupiter Gas giant 11.209 0.41 TRUE
## 6 Saturn Gas giant 9.449 0.43 TRUE
## 7 Uranus Gas giant 4.007 -0.72 TRUE
Regresar a Ejercicios 7
Regresar a Ejercicios 8
79
Introducción a R y RStudio
## Run
## an ordered factor with levels 10 < ... < 3 indicating the assay run.
##
## conc
## a numeric vector giving the known concentration of the protein.
##
## density
## a numeric vector giving the measured optical density (dimensionless) in the assay.
## Duplicate optical density measurements were obtained.
Regresar a Ejercicios 9
Regresar a Ejercicios 10
Regresar a Ejercicios 11
80
Introducción a R y RStudio
Regresar a Ejercicios 12
Regresar a Ejercicios 13
2. Generar un tema perzonalizado, que puedas utilizar en tus gráficas. Puedes modificar,
por ejemplo, el color de fondo el color y ancho del borde, entre otras. Aplicar este tema
a alguna gráfica
elTema<-
theme(panel.background=
element_rect(fill="turquoise")) +
theme(panel.border=
81
Introducción a R y RStudio
element_rect(color="snow4",
fill=NA,size=1.5))
Regresar a Ejercicios 14
2. Con los datos de msleep realiza una grafica de barras o un boxplot, para visualizar las
horas que los animales permanecen despiertos (awake, en eje de las y) vs el tipo de
alimentación (vore, eje de las x). Dale formato a la gráfica y en el caso del boxplot
agrega la distribución de los puntos con la capa geom_jitter.
msleep %>% filter(!is.na(vore)) %>%
ggplot(aes(x = vore, y = awake,color=vore)) +
geom_boxplot() +
geom_jitter(color="grey",size=1) +
theme_bw()
Regresar a Ejercicios 15
82
Introducción a R y RStudio
head(bactgrow)
bact
Regresar a Ejercicios 16
12 Apéndices
12.1 Apéndice 1
12.1.1 Iniciando R desde línea de comandos
83
Introducción a R y RStudio
ls(6)
## [1] "%>%" "add_footnote" "add_header_above" "add_indent"
## [5] "as_image" "auto_index" "cell_spec" "collapse_rows"
## [9] "column_spec" "footnote"
## [ reached getOption("max.print") -- omitted 43 entries ]
Existen diversas maneras de obtener ayuda sobre los comandos de R, a continuación veremos
las más frecuentes. Una manera clásica de obtener ayuda respecto a un comando es utilizando
la palabra help(comando) o ?comando, por ejemplo, para consultar la ayuda del comando
solve:
help(solve)
## Help on topic 'solve' was found in the following packages:
##
## Package Library
## Matrix /Library/Frameworks/R.framework/Versions/4.0/Resources/library
## base /Library/Frameworks/R.framework/Resources/library
##
##
## Using the first match ...
?solve
## Help on topic 'solve' was found in the following packages:
##
## Package Library
## Matrix /Library/Frameworks/R.framework/Versions/4.0/Resources/library
## base /Library/Frameworks/R.framework/Resources/library
##
##
## Using the first match ...
84
Introducción a R y RStudio
## solve(a, b, ...)
##
## ## Default S3 method:
## solve(a, b, tol, LINPACK = FALSE, ...)
##
## Arguments:
##
## a: a square numeric or complex matrix containing the
## coefficients of the linear system. Logical matrices are
## coerced to numeric.
##
## b: a numeric or complex vector or matrix giving the right-hand
Para solicitar ayuda de funciones con caracteres especiales o algunas palabras reservadas,
es necesario poner entre comillas la función o palabra reservada, ya que si no se hace así
obtendremos un mensaje de error, por ejemplo, for es una palabra reservada de R, consultemos
la ayuda sin poner comillas.
help(for)
## Error: <text>:1:9: unexpected ')'
## 1: help(for)
## ^
12.1.3.1 Ayuda en general Para abrir la ayuda general en un navegador (sólo si tenemos
la ayuda en HTML instalada y tenemos conexión a red), utilizamos:
help.start()
85
Introducción a R y RStudio
12.1.3.3 Ayuda sobre ejemplos de uso de una función La función example, nos muestra
ejemplos de ejecución de alguna función en particular, siempre y cuando la función que
buscamos tenga en su descripción ejemplos.
example("data.frame")
##
## dt.frm> L3 <- LETTERS[1:3]
##
## dt.frm> fac <- sample(L3, 10, replace = TRUE)
##
## dt.frm> (d <- data.frame(x = 1, y = 1:10, fac = fac))
## x y fac
## [ reached 'max' / getOption("max.print") -- omitted 10 rows ]
##
## dt.frm> ## The "same" with automatic column names:
## dt.frm> data.frame(1, 1:10, sample(L3, 10, replace = TRUE))
## X1 X1.10 sample.L3..10..replace...TRUE.
## [ reached 'max' / getOption("max.print") -- omitted 10 rows ]
##
## dt.frm> is.data.frame(d)
## [1] TRUE
##
## dt.frm> ## do not convert to factor, using I() :
## dt.frm> (dd <- cbind(d, char = I(letters[1:10])))
## x y fac char
## [ reached 'max' / getOption("max.print") -- omitted 10 rows ]
86
Introducción a R y RStudio
##
## dt.frm> rbind(class = sapply(dd, class), mode = sapply(dd, mode))
## x y fac char
## [ reached getOption("max.print") -- omitted 2 rows ]
##
## dt.frm> stopifnot(1:10 == row.names(d)) # {coercion}
##
## dt.frm> (d0 <- d[, FALSE]) # data frame with 0 columns and 10 rows
## data frame with 0 columns and 10 rows
##
## dt.frm> (d.0 <- d[FALSE, ]) # <0 rows> data frame (3 named cols)
## [1] x
## [ reached getOption("max.print") -- omitted 2 entries ]
## <0 rows> (or 0-length row.names)
##
## dt.frm> (d00 <- d0[FALSE, ]) # data frame with 0 columns and 0 rows
## data frame with 0 columns and 0 rows
12.1.3.4 Ayuda sobre argumentos de una función También se puede solicitar ayuda
reacionada a los argumentos de una determinada función.
args(data.frame)
## function (..., row.names = NULL, check.rows = FALSE, check.names = TRUE,
## fix.empty.names = TRUE, stringsAsFactors = default.stringsAsFactors())
## NULL
Recordemos que con la función dir() podemos consultar los archivos del directorio de trabajo,
para verificar que se creó el archivo archivo.Rdata.
Para almacenar el archivo en un directorio diferente al de trabajo, se requiere especificar la
ruta.
Si queremos llamar a los objetos almacenados en el archivo archivo.Rdata, utilizamos:
87
Introducción a R y RStudio
load(file = "archivo.Rdata")
Cuando queremos guardar uno o varios objetos creados en una sesión, usamos el comando
save.
loadhistory(file = "archivo.Rhistory")
12.3 Apeéndice 2
88
Introducción a R y RStudio
library("dplyr")
dplyr puede ser vista como una gramática para el manejo de datos, donde cada función es
un verbo que trabaja de la siguiente manera:
1. El primer argumento es el nombre del data.frame
2. Los siguiente argumentos describen que se hace con el data.frame usando los nombres
de variables.
3. El resultado es un nuevo data.frame
Es común tener conjuntos de datos con muchas variables. En este caso lo primero que
queremos hacer es enfocarnos solo en algunas de ellas.
select(), nos permite seleccionar un subconjunto de variables. Por ejemplo, si quisieramos
trabajar solo con las columnas name, brainwt y bodywt de nuestro ‘data.frame msleep, lo
haríamos de la siguiente manera:
name_brainwt_bodywt<-select(msleep,name,brainwt,bodywt)
head(name_brainwt_bodywt)
## # A tibble: 6 x 3
## name brainwt bodywt
## <chr> <dbl> <dbl>
## 1 Cheetah NA 50
## 2 Owl monkey 0.0155 0.48
## 3 Mountain beaver NA 1.35
## 4 Greater short-tailed shrew 0.00029 0.019
## 5 Cow 0.423 600
## 6 Three-toed sloth NA 3.85
En este caso hemos usado la gramática “normal”, pero la fortaleza de dplyr consiste en
combinar funciones usando pipes ( %> % ). Es decir,
msleep %>% select(name,brainwt,bodywt) %>% head
## # A tibble: 6 x 3
## name brainwt bodywt
## <chr> <dbl> <dbl>
## 1 Cheetah NA 50
## 2 Owl monkey 0.0155 0.48
## 3 Mountain beaver NA 1.35
## 4 Greater short-tailed shrew 0.00029 0.019
## 5 Cow 0.423 600
## 6 Three-toed sloth NA 3.85
89
Introducción a R y RStudio
El concepto de pipe (tuberías) es el mismo que en Unix. En este caso %> % representa el pipe,
el cual indica que queremos usar el comando de la izquierda como entrada al comando de la
derecha del pipe.
Recordemos que podemos combinar funciones utilizando pipes. Por ejemplo, si queremos
obtener sólo los nombres de las especies domesticadas utilizaremos filter y select
msleep %>% filter(conservation=="domesticated") %>% select(name) %>% head
## # A tibble: 6 x 1
## name
## <chr>
## 1 Cow
## 2 Dog
## 3 Guinea pig
## 4 Chinchilla
## 5 Horse
## 6 Donkey
12.4 Apéndice 3
12.5 facet_wrap()
También podemos dividir en paneles las gráficas utilizando facet_wrap(). En este caso trata
de ordenar los paneles en el mismo número de renglones y columnas. Por ejemplo:
keep_rows <- !(is.na(msleep$vore)) & !(is.na(msleep$conservation))
ggplot(data = msleep[keep_rows, ],
aes(x = bodywt, y = sleep_total)) +
geom_point( ) +
facet_wrap(vore ~ conservation)
90
Introducción a R y RStudio
Podemos cambiar el número de columnas que queremos que se despliegue, por ejemplo, lo
podemos poner en 2, por medio del parámetro ncol.
keep_rows <- !(is.na(msleep$vore)) & !(is.na(msleep$conservation))
ggplot(data = msleep[keep_rows, ],
aes(x = bodywt, y = sleep_total)) +
geom_point( ) +
facet_wrap(vore ~ conservation, ncol = 2)
carni carni
cd domesticated
20
15
10
5
carni carni
en lc
20
15
10
5
carni carni
nt vu
20
15
10
5
herbi herbi
cd domesticated
sleep_total
20
15
10
5
herbi herbi
en lc
20
15
10
5
herbi herbi
nt vu
20
15
10
5
insecti insecti
en lc
20
15
10
5
omni omni
domesticated lc
20
15
10
5
0 2000 4000 6000 0 2000 4000 6000
bodywt
Por otro lado, cuando graficamos, solo renglones o solo columnas, por defecto lo organiza por
poniendo 3 elementos por renglón. Sin embargo, podemos cambiar el orden por medio de los
parámetros ncol y nrow.
keep_rows <- !(is.na(msleep$vore)) & !(is.na(msleep$conservation))
ggplot(data = msleep[keep_rows, ],
aes(x = bodywt, y = sleep_total)) +
91
Introducción a R y RStudio
geom_point( ) +
facet_wrap(vore ~ conservation, nrow = 2)
15
10
5
sleep_total
15
10
12.6 Apéndice 4
12.6.1 Cambiando el fondo de mi gráfica de manera personalizada
Para cambiar las características de gráfica, de forma perzonalizada, en términos del fondo y
las líneas divisorias (grid), entre otras, hacemos uso de la capa theme. Por ejemplo, vamos a
modificar el panel principal de la gráfica. Los elementos que modificaremos serán:
1. Fondo (background)
2. Borde (border)
3. Líneas divisorias (grid.major, grid.minor)
keep_rows <- !(is.na(msleep$vore))
g1<-ggplot(data = msleep[keep_rows, ],
aes(x = bodywt, y = sleep_total,
color = vore)) +
geom_point( ) +
labs(title="Relación entre el peso y las horas de sueño",
subtitle="El peso está definido en Kg",
x="Peso del animal", y="Horas de sueño")
## Modificando el fondo
g1 <-g1 +
theme(panel.background=
element_rect(fill="lightyellow2")) +
theme(panel.border=
element_rect(color="black",
fill=NA,size=1.5))
92
Introducción a R y RStudio
g1 <- g1 +
theme(legend.background=
element_rect(color="black",
fill="khaki")) +
theme(legend.key=element_rect(fill=NA))
print(g1)
20
15
vore
Horas de sueño
carni
herbi
10 insecti
omni
Si el dieseño que creamos es el que vamos a utilizar en diversas gráficas podemos asignar
estas capas a un objeto y utilizarlo en otras gáficas. Por ejemplo,
Mitema<-
theme(panel.background=
element_rect(fill="lightyellow2")) +
theme(panel.border=
element_rect(color="black",
fill=NA,size=1.5)) +
theme(panel.grid.major=
element_line(colour="grey70")) +
theme(panel.grid.minor=
93
Introducción a R y RStudio
element_line(colour="grey 60",
linetype="dashed")) +
theme(legend.background=
element_rect(color="black",
fill="khaki")) +
theme(legend.key=element_rect(fill=NA))
cd
10
5
domesticated
20
15
10
5
20
15
en
10 vore
Horas de sueño
5
20 carni
15
herbi
lc
10
5
insecti
20
15 omni
nt
10
5
20
15
vu
10
5
20
15
NA
10
5
0 2000 4000 6000
Peso del animal
12.7 Apéndice 5
12.7.1 Gráfica de Pie
94
Introducción a R y RStudio
25 26.3
vore
carni
herbi
insecti
6.6
omni
42.1
95