Capítulo3 Flujo de trabajo
El tema proviene de los siguientes sitios.
English: https://r4ds.had.co.nz/workflow-projects.html
Español: https://es.r4ds.hadley.nz/04-workflow-basics.html
Fecha de la última revisión
## [1] "2026-09-09"
3.1 Temas:
Reduciendo Errores
getwd()
setwd()
Su Proyecto
Seleccionar el tab Session →→ Set Working Directory →→ To Project Directory ***
3.2 Por qué el orden importa más que el código
Este capítulo no enseña ninguna técnica de análisis. Enseña algo menos vistoso y más importante: cómo organizar el trabajo para que no se pierda.
Casi todo el mundo aprende R de la misma manera equivocada. Se abre R, se escribe en la consola hasta que sale el gráfico, y ahí se queda. Dos semanas después hay que rehacer el gráfico con los datos corregidos, y nadie se acuerda de qué se hizo. El análisis existió, pero no quedó registrado en ningún sitio: la consola es un lugar de paso.
La alternativa es sencilla y hay que adoptarla desde el primer día: todo lo que funcione se copia a un documento, y ese documento vive dentro de un proyecto. La consola es el taller donde se prueba; el documento es lo que se guarda. Si al terminar la sesión de trabajo puedes cerrar R, volver a abrirlo mañana, darle a Knit y obtener exactamente el mismo resultado, entonces tu trabajo es reproducible. Si no puedes, tu trabajo depende de que no se apague la computadora, y eso no es un análisis, es un accidente esperando ocurrir.
Hay una tercera razón, además de la memoria y la reproducibilidad: los errores. Un análisis que está escrito se puede leer, y un análisis que se puede leer se puede corregir. Cuando alguien te dice “creo que ahí filtraste mal”, lo puede señalar con el dedo. Cuando el análisis vivió y murió en la consola, la única respuesta posible es “no sé”.
Usa Proyectos de RStudio (menú File → New Project): mantienen juntos tus datos, scripts y resultados, y evitan depender de setwd(), que hace tu código difícil de compartir.
RStudio, el entorno de trabajo que usamos, fue creado por JJ Allaire y lanzado en 2011; la empresa se renombró Posit en 2022. Los Proyectos de RStudio nacieron para mantener cada análisis autocontenido y reproducible.
3.3 Creación de un proyecto:
Un proyecto de RStudio es simplemente una carpeta con un archivo .Rproj
dentro. Ese archivo no contiene tus datos ni tu código: lo único que hace es
decirle a RStudio “cuando me abras, párate aquí”. Suena trivial y resuelve el
problema más común de todos.
R siempre está “parado” en alguna carpeta, que se llama el directorio de
trabajo. Cuando escribes read_csv("Datos/mis_datos.csv"), R no busca ese
archivo en toda la computadora: lo busca a partir del directorio de trabajo.
Si el directorio de trabajo es la carpeta del proyecto, la ruta funciona. Si es
otra, no funciona, y el error dice que el archivo no existe aunque lo estés
viendo en la pantalla.
Puedes preguntarle a R dónde está parado, y puedes moverlo a mano:
getwd() # ¿dónde estoy parado?
setwd("/Users/nombre/carpeta") # muévete a otra carpeta (NO hagas esto)
list.files() # ¿qué archivos ve R desde aquí?getwd(), setwd() y list.files(): dónde está parado R.
getwd(): devuelve la carpeta en la que R está trabajando ahora mismo. Es lo primero que hay que correr cuando un archivo “no aparece”.list.files(): lista los archivos que R ve desde esa carpeta. Si tu archivo de datos no está en esa lista, R no lo va a encontrar con una ruta relativa.setwd("ruta"): cambia el directorio de trabajo a mano. Funciona, pero no lo uses: la ruta que escribes solo existe en tu computadora, así que el script deja de funcionar en cualquier otra máquina, incluso en la tuya si mueves la carpeta.
setwd("/Users/rlt/Dropbox/BIOL4026/tarea3") es la línea que más trabajos rompe
al momento de entregarlos. En la computadora del profesor esa carpeta no existe,
así que el documento no compila y no se puede corregir. La solución no es
escribir mejor la ruta: es no escribirla. Abre el proyecto y usa rutas
relativas como "Datos/archivo.csv".
- crear un proyecto para cada curso.
- crear un proyecto para cada investigación.
- No se te olvida de añadir tus archivos de datos en el proyecto.
- Describe claramente todos tus análisis y donde conseguiste la información.
- Describe tu interpretación de los análisis o gráficos.
- Correr los “scripts” uno a la vez para asegurar que funcione.
- knit el archivo .rmd para asegurar que no falte nada.
- no mezclar proyectos de investigación en un mismo proyecto.
Una estructura de carpetas que funciona bien para un curso o una investigación pequeña es esta, y es la que usa este libro:
MiProyecto/
├── MiProyecto.Rproj <- abre siempre por aquí
├── Datos/ <- los datos crudos, que nunca se modifican
├── Graficos/ <- lo que produce el análisis
└── analisis.Rmd <- el documento
La regla que más vale la pena respetar es la de Datos/: los datos crudos no
se tocan nunca. Si hay que corregir un valor, se corrige con código dentro del
documento, no editando el archivo original. Así, si más adelante resulta que la
corrección estaba mal, se ve exactamente qué se cambió y se puede deshacer. Un
archivo de Excel que alguien “arregló a mano” en 2019 es irrecuperable.
3.4 Objetos, nombres y la flecha <-
Antes de seguir, dos minutos sobre la mecánica básica. En R, guardar un
resultado con un nombre se hace con la flecha <-:
La flecha se lee “guarda a la derecha en el nombre de la izquierda”. El atajo de
teclado en RStudio es Alt y el signo de menos (Option y menos en Mac); vale
la pena aprenderlo desde hoy porque la vas a escribir miles de veces.
Los nombres pueden llevar letras, números, puntos y el guion bajo, pero tienen
que empezar por una letra. R distingue mayúsculas de minúsculas: Millas y
millas son dos objetos distintos, y la mitad de los object not found del
curso salen de ahí. La costumbre en el tidyverse es escribir todo en minúsculas y
separar palabras con guion bajo: esperanza_media, datos_limpios,
grafico_final.
Un nombre bueno dice qué es la cosa, no de qué tipo es. x1, x2 y datos2
no le dicen nada a nadie, ni siquiera a ti dentro de un mes. millas_2008 o
promedio_por_clase sí. Escribir nombres largos no cuesta nada: RStudio
autocompleta con la tecla de tabulación.
Para ver qué objetos tienes creados en la sesión, y para borrarlos:
No pongas rm(list = ls()) al principio de tus documentos como si fuera una
limpieza. No limpia de verdad: los paquetes cargados siguen cargados y las
opciones cambiadas siguen cambiadas. La única limpieza real es reiniciar R
(Session > Restart R), y esa es la costumbre que hay que coger.
#install.packages("tidyverse")
library(tidyverse) # ggplot2, dplyr, tidyr, readr, purrr, tibble, stringr, forcats
# install.packages("datos")
library(datos)Fíjate en dos detalles de este bloque, porque se repiten en todo el libro. El
primero es que las líneas de install.packages() están comentadas con #:
están ahí para que sepas qué hace falta, pero no se ejecutan cada vez que
compilas el documento, porque instalar es algo que se hace una sola vez. El
segundo es que los library() van al principio, todos juntos. Así, quien
abra tu documento sabe de entrada qué necesita tener instalado.
3.4.1 Un set de sobre carros en el archivo (paquete) datos
millas es un conjunto de datos que viene dentro del paquete datos, así que no
hay que importarlo de ningún archivo: con library(datos) ya está disponible.
Tiene 234 automóviles y 11 variables, entre ellas el consumo de combustible en
ciudad y en carretera. Es la traducción al español de mpg, el conjunto que usa
el libro R for Data Science.
Al escribir su nombre y ejecutar, R lo imprime:
## # A tibble: 234 × 11
## fabricante modelo cilindrada anio cilindros transmision traccion ciudad
## <chr> <chr> <dbl> <int> <int> <chr> <chr> <int>
## 1 audi a4 1.8 1999 4 auto(l5) d 18
## 2 audi a4 1.8 1999 4 manual(m5) d 21
## 3 audi a4 2 2008 4 manual(m6) d 20
## 4 audi a4 2 2008 4 auto(av) d 21
## 5 audi a4 2.8 1999 6 auto(l5) d 16
## 6 audi a4 2.8 1999 6 manual(m5) d 18
## 7 audi a4 3.1 2008 6 auto(av) d 18
## 8 audi a4 quattro 1.8 1999 4 manual(m5) 4 18
## 9 audi a4 quattro 1.8 1999 4 auto(l5) 4 16
## 10 audi a4 quattro 2 2008 4 manual(m6) 4 20
## # ℹ 224 more rows
## # ℹ 3 more variables: autopista <int>, combustible <chr>, clase <chr>
Lo que aparece no es la tabla completa, y eso es a propósito. millas es un
tibble, una versión moderna del data.frame que al imprimirse muestra solo
las primeras diez filas y las columnas que caben en la pantalla, y añade debajo
de cada nombre de columna el tipo de la variable: <chr> para texto, <int>
para números enteros, <dbl> para números con decimales. Esa línea de tipos es
información valiosa que un data.frame normal no te da.
3.4.2 Mi primer gráfico

Este gráfico se construye en dos piezas unidas por un signo de +. La primera,
ggplot(data = millas), dice con qué datos vamos a trabajar y crea un lienzo
vacío. La segunda, geom_point(...), añade una capa de puntos. Dentro de
aes() (de aesthetics, estéticas) se dice qué variable va en cada eje. La idea
de construir gráficos apilando capas con + es el corazón de ggplot2 y se
trabaja a fondo en el próximo capítulo; por ahora basta con reconocer las piezas.
Lo que muestra el gráfico es una relación negativa clara: los motores de más cilindrada consumen más, es decir, rinden menos millas por galón en carretera.
3.4.3 Las funciones head y tail
head(x, n) y tail(x, n): primeras y últimas filas.
- Qué hacen:
head()muestra las primerasnfilas de un data frame (o elementos de un vector) ytail()las últimas. Por defecton = 6. - Uso: echar un vistazo rápido a los datos sin imprimirlos completos.
Antes, una demostración de lo que pasa cuando falta la capa geométrica:

El resultado es un rectángulo gris vacío. ggplot() preparó el lienzo, pero
nunca le dijimos qué dibujar en él. Es un error frecuente al principio, y el
síntoma es exactamente este: un gráfico en blanco sin ningún mensaje de error. Si
te pasa, revisa que haya un + geom_algo().
head() y tail() son la manera rápida de mirar los datos sin llenar la
pantalla. tail() es más útil de lo que parece: muchos archivos de Excel traen
filas de totales, notas o celdas en blanco al final, y solo se ven mirando el
final.
## # A tibble: 234 × 11
## fabricante modelo cilindrada anio cilindros transmision traccion ciudad
## <chr> <chr> <dbl> <int> <int> <chr> <chr> <int>
## 1 audi a4 1.8 1999 4 auto(l5) d 18
## 2 audi a4 1.8 1999 4 manual(m5) d 21
## 3 audi a4 2 2008 4 manual(m6) d 20
## 4 audi a4 2 2008 4 auto(av) d 21
## 5 audi a4 2.8 1999 6 auto(l5) d 16
## 6 audi a4 2.8 1999 6 manual(m5) d 18
## 7 audi a4 3.1 2008 6 auto(av) d 18
## 8 audi a4 quattro 1.8 1999 4 manual(m5) 4 18
## 9 audi a4 quattro 1.8 1999 4 auto(l5) 4 16
## 10 audi a4 quattro 2 2008 4 manual(m6) 4 20
## # ℹ 224 more rows
## # ℹ 3 more variables: autopista <int>, combustible <chr>, clase <chr>
## # A tibble: 3 × 11
## fabricante modelo cilindrada anio cilindros transmision traccion ciudad
## <chr> <chr> <dbl> <int> <int> <chr> <chr> <int>
## 1 audi a4 1.8 1999 4 auto(l5) d 18
## 2 audi a4 1.8 1999 4 manual(m5) d 21
## 3 audi a4 2 2008 4 manual(m6) d 20
## # ℹ 3 more variables: autopista <int>, combustible <chr>, clase <chr>
## # A tibble: 10 × 11
## fabricante modelo cilindrada anio cilindros transmision traccion ciudad
## <chr> <chr> <dbl> <int> <int> <chr> <chr> <int>
## 1 volkswagen new beetle 2 1999 4 auto(l4) d 19
## 2 volkswagen new beetle 2.5 2008 5 manual(m5) d 20
## 3 volkswagen new beetle 2.5 2008 5 auto(s6) d 20
## 4 volkswagen passat 1.8 1999 4 manual(m5) d 21
## 5 volkswagen passat 1.8 1999 4 auto(l5) d 18
## 6 volkswagen passat 2 2008 4 auto(s6) d 19
## 7 volkswagen passat 2 2008 4 manual(m6) d 21
## 8 volkswagen passat 2.8 1999 6 auto(l5) d 16
## 9 volkswagen passat 2.8 1999 6 manual(m5) d 18
## 10 volkswagen passat 3.6 2008 6 auto(s6) d 17
## # ℹ 3 more variables: autopista <int>, combustible <chr>, clase <chr>
3.5 Información sobre el archivo
Usa el signo de interrogación ? antes del nombre de la función o archivo. Remueve el “#” para ver el resultado
? y ??: la ayuda de R.
?millas: abre la documentación de un conjunto de datos o de una función. Para los datos, explica qué significa cada columna y en qué unidades está.?head: para una función, la ayuda tiene siempre las mismas secciones. Las dos que hay que leer son Usage (los argumentos y sus valores por defecto) y Examples, al final, que se pueden copiar y correr.??regresion: busca el término en toda la documentación instalada, cuando no sabes cómo se llama la función.
Leer la ayuda de R cuesta al principio porque está escrita para quien ya sabe. El truco es empezar por el final: baja hasta Examples, corre uno, mira qué sale, y solo entonces sube a leer los argumentos. Aprender a leer la ayuda es una de las destrezas que más rinde en el curso.
3.5.1 Las dimensiones del archivo
## [1] 234 11
El resultado son dos números: primero las filas, después las columnas.
Siempre en ese orden, y ese orden se repite en todo R (en la selección con
corchetes, en las matrices, en apply()). Vale la pena fijarlo desde ahora:
filas, columnas.
3.5.2 Construcción de mi primer gráfico
- el nombre del archivo es primero
- nombre de las variables (nombre de las columnas)
- si quiere tener un color para cada grupo

Aquí añadimos una tercera variable al gráfico, fabricante, asignándola al
color. Como está dentro de aes(), ggplot2 entiende que el color depende
de los datos: le asigna un color distinto a cada fabricante y construye
automáticamente la leyenda de la derecha. Esa distinción, dentro o fuera de
aes(), es la que más confusión causa al principio y se explica en detalle en el
próximo capítulo.
3.5.3 La función shape para cambiar la forma de los puntos
La función shape es para cambiar el estilo de los puntos
Los colores en hexadecimal deben empezar con #, por ejemplo color = "#369787". Sin el #, R no reconoce el código y marcará error.
ggplot(data = millas) +
geom_point(mapping = aes(x = cilindrada, y = autopista), shape=23, color = "369787", fill="yellow")
shape escoge la forma del punto con un número del 0 al 25. Las formas de la 21
a la 25 son especiales porque tienen borde y relleno por separado: el borde
lo controla color y el interior lo controla fill. Por eso aquí aparecen los
dos argumentos. En las formas del 0 al 20 el argumento fill no hace nada, y
esa es otra fuente frecuente de confusión (“puse fill y no cambió nada”).
Fíjate también en que shape, color y fill están fuera de aes(): no
dependen de ninguna variable, son valores fijos que se aplican a todos los
puntos por igual.
3.5.4 Salvar un gráfico en otro formato
Como salvar la figura en formato recuperable para subir en otros documentos o compartir
ggsave() guarda el último gráfico que creaste y lo escribe en tu directorio de trabajo. La extensión del nombre (.png, .jpg, .tiff) determina el formato del archivo.

ggsave(): guardar un gráfico en un archivo.
- Qué hace: escribe en disco el último gráfico dibujado. El formato sale de la extensión del nombre:
.png,.jpg,.tiff,.pdf. width,height,units: el tamaño de la figura, por ejemplowidth = 6, height = 4, units = "in". Si no los pones, usa el tamaño de la ventana de gráficos, que cambia de computadora en computadora.dpi: la resolución.300es lo que piden casi todas las revistas científicas.- La ruta es relativa al directorio de trabajo, así que
"img/cilindro_milla.jpg"solo funciona si existe una carpetaimgdentro del proyecto.
Si ggsave() da el error cannot open file, casi siempre es que la carpeta que
pusiste en la ruta no existe. R no la crea sola. Créala tú, o hazlo con código:
dir.create("img").
Para figuras que van a un informe o a una publicación, conviene usar .png o
.tiff y no .jpg. El formato .jpg comprime perdiendo información y deja
manchas alrededor de las líneas finas y del texto, que es justamente lo que
tiene un gráfico científico.
## # A tibble: 234 × 11
## fabricante modelo cilindrada anio cilindros transmision traccion ciudad
## <chr> <chr> <dbl> <int> <int> <chr> <chr> <int>
## 1 audi a4 1.8 1999 4 auto(l5) d 18
## 2 audi a4 1.8 1999 4 manual(m5) d 21
## 3 audi a4 2 2008 4 manual(m6) d 20
## 4 audi a4 2 2008 4 auto(av) d 21
## 5 audi a4 2.8 1999 6 auto(l5) d 16
## 6 audi a4 2.8 1999 6 manual(m5) d 18
## 7 audi a4 3.1 2008 6 auto(av) d 18
## 8 audi a4 quattro 1.8 1999 4 manual(m5) 4 18
## 9 audi a4 quattro 1.8 1999 4 auto(l5) 4 16
## 10 audi a4 quattro 2 2008 4 manual(m6) 4 20
## # ℹ 224 more rows
## # ℹ 3 more variables: autopista <int>, combustible <chr>, clase <chr>
Ejercicio para someter:
- baja el paquete “ggversa”
- activar el paquete “ggversa”
- mirar las variables del archivo en este paquete que se llama “Anolis”
- haga un gráfico que incluye lo siguiente
- en el eje de x = el SVL. que es el tamaño del lagarto del hocico a la cloaca y en la variable de “TAIL” en el eje de y.
- selecciona la variable “SEX_AGE” para color
- salva el gráfico en .png o .jpg
- subir el gráfico aquí
## # A tibble: 6 × 15
## STUDY Survey_Site LOCATION TIME DATE SEASON SPECIES SEX_AGE HEIGHT
## <chr> <chr> <chr> <tim> <chr> <chr> <chr> <chr> <dbl>
## 1 Mark/recap North Tower El Verde 10:46 3/13… dry Anolis… Female 0
## 2 Mark/recap Woods walkway t… El Verde 10:15 2/20… dry Anolis… Juvenil 0
## 3 Mark/recap Woods walkway t… El Verde 11:15 2/21… dry Anolis… Male 0
## 4 Mark/recap North Tower El Verde 11:06 3/16… dry Anolis… Juvenil 0.3
## 5 Mark/recap North Tower El Verde 12:31 3/11… dry Anolis… Male 0.3
## 6 Mark/recap North Tower El Verde 01:00 3/9/… dry Anolis… Female 0.4
## # ℹ 6 more variables: DISTANCE_FROM_CENTERLINE <dbl>, PERCH_SUBSTRATE <chr>,
## # PERCH_DIAMETER <int>, WEIGHT <dbl>, SVL <dbl>, TAIL <dbl>
Los datos de Anolis vienen del paquete ggversa, desarrollado para este curso.
Recuerda que los nombres científicos de los organismos, como Anolis cristatellus
o Anolis gundlachi, se escriben siempre en cursivas.
3.5.5 Extracción de valores de un conjunto de datos
Hasta aquí hemos mirado la tabla completa. Muchas veces lo que necesitas es una
sola columna, y para eso está el signo de dólar. diamantes$precio significa
“la columna precio del conjunto diamantes”, y devuelve un vector, no una
tabla. Eso importa porque las funciones que vienen a continuación (max(),
min(), mean(), unique()) trabajan sobre vectores, no sobre tablas.
dim(), nrow(), ncol(), unique(): explorar la forma de los datos.
dim(x): filas y columnas;nrow(x)/ncol(x)dan cada una por separado.unique(x$col): los valores distintos de una columna (útil para variables categóricas).max()/min(): valor máximo/mínimo de una variable numérica.
Estas cinco funciones son lo primero que hay que correr con cualquier conjunto de
datos nuevo, antes de analizar nada: dim() para saber el tamaño, names() para
los nombres de las columnas, head() para ver la pinta que tienen, unique()
sobre las categóricas para ver cuántos grupos hay, y summary() para los rangos.
Cinco minutos ahí te evitan analizar mal durante dos horas.
Aquí usamos el conjunto de datos de diamantes que se encuentra en el paquete ggplot2
3.5.5.1 Los primeros datos de un archivo
## # A tibble: 6 × 10
## precio quilate corte color claridad profundidad tabla x y z
## <int> <dbl> <ord> <ord> <ord> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 326 0.23 Ideal E SI2 61.5 55 3.95 3.98 2.43
## 2 326 0.21 Premium E SI1 59.8 61 3.89 3.84 2.31
## 3 327 0.23 Bueno E VS1 56.9 65 4.05 4.07 2.31
## 4 334 0.29 Premium I VS2 62.4 58 4.2 4.23 2.63
## 5 335 0.31 Bueno J SI2 63.3 58 4.34 4.35 2.75
## 6 336 0.24 Muy bueno J VVS2 62.8 57 3.94 3.96 2.48
3.5.5.4 Las dimensiones de un archivo
## [1] 53940 10
Nota que dim() devuelve exactamente los dos números anteriores juntos. Las tres
funciones dan la misma información; se usan por separado cuando necesitas el
número dentro de un cálculo, por ejemplo para calcular una proporción sobre el
total de filas.
3.5.5.6 El valor mínimo de una variable
## [1] 326
Si la columna tiene valores faltantes, max() y min() devuelven NA, no el
máximo de lo que sí hay. Es el comportamiento correcto: R no adivina. Para
ignorar los faltantes hay que pedirlo explícitamente con
max(x, na.rm = TRUE). El tema de los NA tiene su propio capítulo más
adelante.
3.5.5.7 Los valores discretos de una variable
## [1] Ideal Premium Bueno Muy bueno Regular
## Levels: Regular < Bueno < Muy bueno < Premium < Ideal
unique() devuelve los valores distintos, sin repetir. En corte son cinco
categorías de calidad, y aparecen en orden porque es un factor ordenado: R
sabe que “Regular” es peor que “Ideal” y guarda ese orden. Si solo quieres saber
cuántas categorías hay, length(unique(diamantes$corte)) te da el número, y
table(diamantes$corte) te dice además cuántos diamantes hay en cada una.
diamantes$corte
diamantes$precio
3.6 Ejemplos de Gráficos
library(readr)
Vuelos_SJU_2018_Ene <- read_csv("Datos/Vuelos_SJU_2018_Ene.csv")
head(Vuelos_SJU_2018_Ene)## # A tibble: 6 × 14
## FL_DATE OP_UNIQUE_CARRIER ORIGIN ORIGIN_CITY_NAME ORIGIN_STATE_ABR DEST
## <chr> <chr> <chr> <chr> <chr> <chr>
## 1 2/1/18 NK SJU San Juan, PR PR MCO
## 2 2/1/18 AA MIA Miami, FL FL SJU
## 3 2/1/18 AA SJU San Juan, PR PR DFW
## 4 2/1/18 AA SJU San Juan, PR PR MIA
## 5 2/1/18 AA SJU San Juan, PR PR ORD
## 6 2/1/18 AA MIA Miami, FL FL SJU
## # ℹ 8 more variables: DEST_CITY_NAME <chr>, DEST_STATE_ABR <chr>,
## # DEP_TIME <dbl>, DEP_DELAY <dbl>, CRS_ARR_TIME <dbl>, ARR_TIME <dbl>,
## # ARR_DELAY <dbl>, CANCELLED <dbl>
Este bloque es el cierre natural del capítulo, porque junta las dos ideas. La
ruta "Datos/Vuelos_SJU_2018_Ene.csv" es relativa: no empieza con / ni con
C:, así que R la busca a partir del directorio de trabajo. Funciona porque el
documento vive dentro del proyecto y la carpeta Datos está ahí dentro. Si
alguien copia este repositorio completo a otra computadora, sigue funcionando sin
cambiar una sola letra. Eso es todo lo que significa “análisis reproducible”.
3.7 Ejercicios del capítulo
Sobre los ejercicios de este capítulo. Cada ejercicio se entrega con tres
cosas: el script, el resultado (que el bloque corra) y una explicación
en palabras. Los ejercicios usan paises del paquete datos, no millas ni
diamantes, que son los conjuntos con los que se enseña en el capítulo. Varios
te piden hacer algo dentro de RStudio y no solo calcular. La hoja completa para
entregar está en Ejercicios/Ejercicios_Capitulo_03_flujo-de-trabajo.Rmd.
3.7.1 Ejercicio 1. Dónde estás parado
Corre getwd() y list.files() en tu documento y mira el resultado.
Verificación: entre los nombres que devuelve list.files() tiene que
aparecer el de tu propio archivo .Rmd. Si no aparece, no estás trabajando desde
donde crees.
En palabras: si tu archivo resultados.csv estuviera en la carpeta de
Descargas y escribieras read_csv("resultados.csv"), ¿lo encontraría R? Explica
por qué, usando lo que te devolvió getwd().
3.7.2 Ejercicio 2. Guardar con un nombre
Datos: paises. Guarda el conjunto completo en un objeto con un nombre que
describa lo que es (no x ni datos1), y después comprueba que existe.
Verificación: ls() tiene que incluir tu nombre, y nrow() de tu objeto
tiene que dar 1704.
En palabras: explica por qué Paises y paises serían dos objetos distintos
para R, y qué tipo de error verías si te equivocas de mayúscula.
3.7.3 Ejercicio 3. La forma de los datos
Datos: paises. Averigua cuántas filas y cuántas columnas tiene, y cómo se
llaman las columnas. Usa dim(), nrow(), ncol() y names().
Verificación: tienen que salir 1704 filas y 6 columnas, y dim() tiene
que devolver esos dos números en ese orden.
En palabras: paises tiene 142 países y 12 años. Multiplica y compara con el
número de filas. ¿Qué te dice el resultado sobre cómo está organizada la tabla,
es decir, qué representa una fila?
3.7.4 Ejercicio 4. El principio y el final
Datos: paises. Muestra las 4 primeras filas y las 4 últimas.
Verificación: los dos bloques deben devolver 4 filas cada uno, y el país de las primeras filas debe ser distinto al de las últimas.
En palabras: menciona una razón concreta por la que mirar el final de un archivo de datos puede revelar un problema que no se ve mirando el principio.
3.7.5 Ejercicio 5. Una sola columna
Datos: paises. Usando el signo de dólar, saca la columna continente y
averigua cuántos continentes distintos hay y cuáles son. Después haz lo mismo con
anio.
Verificación: tienen que salir 5 continentes y 12 años distintos.
En palabras: paises$continente devuelve un vector y paises es una tabla.
¿Por qué unique() necesita el vector y no le puedes pasar la tabla completa?
3.7.6 Ejercicio 6. Un gráfico guardado
Datos: paises. Haz un gráfico de puntos de pib_per_capita en el eje de x
contra esperanza_de_vida en el eje de y, con el continente en el color.
Guárdalo con ggsave() en una carpeta Graficos_ejercicios de tu proyecto, con
6 pulgadas de ancho, 4 de alto y 300 dpi.
Verificación: después de guardarlo, file.exists("Graficos_ejercicios/tu_nombre_de_archivo.png")
tiene que devolver TRUE. Si la carpeta no existe, créala con dir.create()
antes.
En palabras: el gráfico tiene una forma muy característica, no es una recta. Descríbela en una o dos oraciones: ¿qué le pasa a la esperanza de vida a medida que sube el ingreso?
3.7.7 Ejercicio 7 (BONO). La prueba de la sesión limpia
Reinicia R (Session > Restart R) y compila tu documento entero con Knit,
desde la primera línea. Después, en la ayuda, lee ?paises y contesta.
Verificación: el documento tiene que compilar sin errores desde una sesión recién reiniciada.
En palabras: dos cosas. Primero, si se cayó, ¿en qué línea fue y qué faltaba?
Segundo, según la ayuda, ¿en qué unidades está pib_per_capita y por qué esa
unidad hace que se puedan comparar países de tamaños muy distintos?