From afe017d9b64a55ed14594c84ac97796b4aee4188 Mon Sep 17 00:00:00 2001 From: andreavargasmontero Date: Mon, 25 Oct 2021 21:35:21 -0600 Subject: [PATCH 01/29] Typos en README --- README.Rmd | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/README.Rmd b/README.Rmd index 0f8a30e..30794c0 100644 --- a/README.Rmd +++ b/README.Rmd @@ -67,14 +67,16 @@ iniciará el proceso de instalación. ## **Errores de instalación** En caso de que aparezcan mensajes como por ejemplo: + ```{r, eval = FALSE} Warning in install.packages : package ‘remotes’ is not available (for R version 4.0.2) ``` -Lo que debemos hacer es instalar el paquete que nos indica (en el ejemplo anterior -sería el paquete `remotes` que no tenemos instalado). Esto lo hacemos con la -siguiente función: +Lo que debemos hacer es instalar el paquete que nos indica (en el ejemplo +anterior sería el paquete `remotes` que no tenemos instalado). Esto lo hacemos +con la siguiente función: + ```{r, eval = FALSE} install.packages("remotes") ``` @@ -90,7 +92,8 @@ tutoriales, entre estos los de ixpantia. Deberíamos de poder visualizar algo similar a la imagen siguiente: ![](man/figures/tutoriales_ejemplo.png) -Para usar uno de los tutoriales nada mas debes presionar el botón `Start Tutorial` y se desplegará el tutorial en tu RStudio o en tu navegador. +Para usar uno de los tutoriales nada mas debes presionar el botón +`Start Tutorial` y se desplegará el tutorial en tu RStudio o en tu navegador. Notarás que hay en algunos casos dos tutoriales por sesión. Ambos son ejercicios que se pueden completar de manera autoguiada, sin embargo, si @@ -98,7 +101,9 @@ estás en un curso de ixpantia la distinción va a estar en su uso durante la sesión o para realizar como tareas. ## Tutorial de uso del paquete en vivo -En [este video](https://www.youtube.com/watch?v=jBSDZ1Juji4) puedes encontrar un tutorial rápido de uso e instalación del paquete. Puedes seguirlo paso a paso para poder utilizar el paquete o bien, como referencia rápida si posteriormente no recuerdas cómo hacerlo. +En [este video](https://www.youtube.com/watch?v=jBSDZ1Juji4) puedes encontrar un tutorial rápido de uso e instalación del paquete. Puedes seguirlo paso a paso +para poder utilizar el paquete o bien, como referencia rápida si posteriormente +no recuerdas cómo hacerlo. ## Ayuda o sugerencias From da93a25d99d54742624e9ed90274610d050dd588 Mon Sep 17 00:00:00 2001 From: andreavargasmontero Date: Mon, 25 Oct 2021 21:35:38 -0600 Subject: [PATCH 02/29] Code review de tarea_tidyr --- inst/tutorials/tarea_tidyr/tarea_tidyr.Rmd | 80 ++++++++++++++++------ 1 file changed, 58 insertions(+), 22 deletions(-) diff --git a/inst/tutorials/tarea_tidyr/tarea_tidyr.Rmd b/inst/tutorials/tarea_tidyr/tarea_tidyr.Rmd index 39e9beb..f6f2d4e 100644 --- a/inst/tutorials/tarea_tidyr/tarea_tidyr.Rmd +++ b/inst/tutorials/tarea_tidyr/tarea_tidyr.Rmd @@ -26,10 +26,12 @@ library(untidydata) library(dplyr) library(here) -spirantization2 <- spirantization %>% +spirantization <- spirantization %>% select(-cIntensity) -separado <- separate(spirantization2, id, into = c("participante", "numero"), sep = "_") +separado <- separate(spirantization, id, + into = c("participante", "numero"), + sep = "_") ancho <- spread(separado, key = participante, value = vIntensity) @@ -38,30 +40,36 @@ tutorial_options(exercise.checker = gradethis::grade_learnr) ``` ```{r, echo=FALSE, out.width="35%", fig.align = "center"} -knitr::include_graphics("https://storage.googleapis.com/datos_cursos/ixpantia_introR/ixpantia_logo.png") +knitr::include_graphics(" + https://storage.googleapis.com/datos_cursos/ixpantia_introR/ixpantia_logo.png + ") ``` -## Datos: **spirantization2** -Este conjunto de datos proviene del paquete **untidydata** y contiene informacion sobre datos simulado que contiene medidas de intensidad de una palabra inicial o secuencia de vocales obstruentes intervocalicas para dos grupos de estudiantes y hablantes nativos de español. +## Datos: **spirantization** + +Este conjunto de datos proviene del paquete **untidydata** y contiene +información sobre datos simulado que contiene medidas de intensidad de una +palabra inicial para dos grupos de estudiantes y hablantes nativos de español. ```{r} -glimpse(spirantization2) +glimpse(spirantization) ``` Descripcion de las variables | Variable | Descripcion | |:--------:|:-----------:| -| `id` | Identificación del participante y repeticion | -| `position` | Inicial o intervocálica| -| `vIntensity` | Intensidad en dB de la siguiente vocal | - +| `id` | Identificación del participante y repetición | +| `position` | Posición de la inicial intervocálica | +| `vIntensity` | Intensidad de la siguiente vocal (en dB) | ## Ejercicios ### ¿Cuál es el problema del conjunto de datos? -El set de datos que vamos a utilizar no cumple con las caracteristicas de la *tidy data*, ¿por qué? +El set de datos que vamos a utilizar no cumple con las características de la +*tidy data*, ¿por qué? + ```{r check2, echo=FALSE} question("¿Cuál es el problema del conjunto de datos?", answer("Las variables no están bien identificadas"), @@ -75,19 +83,24 @@ question("¿Cuál es el problema del conjunto de datos?", ### Separe la columa `id` en dos columnas distintas: `paricipante` y `numero` -La columna `id` en **spirantization2** identifica dos variables distintas, por lo que es necesario separarla en dos. Usando una herramienta de `tidyr`, separe esta columna. +La columna `id` en **spirantization** identifica dos variables distintas, por +lo que es necesario separarla en dos. Usando una herramienta de `tidyr`, separe +esta columna. ```{r separate, exercise = TRUE} ``` ```{r separate-hint-1} -"into = c("participante", "numero"), sep = "_")" +'into = c("participante", "numero"), sep = "_")' ``` ```{r separate-check} grade_result( - pass_if(~ identical(unlist(.result), unlist(separate(spirantization2, id, into = c("participante", "numero"), sep = "_"))), "Buenísimo!") + pass_if(~ identical(unlist(.result), + unlist(separate(spirantization, id, + into = c("participante", "numero"), + sep = "_"))), "Buenísimo!") ) ``` @@ -95,7 +108,10 @@ grade_result( ### Cree un nuevo conjunto de datos que cree una columna para cada participante -En el ejercicio anterior separamos la columna `id` de **spirantization2**, esto quedó guardado en un nuevo set de datos llamado **separado**. Sin embargo, es un set de datos largo, ahora debe convertirlo en un set ancho, donde cada participante represente una columna. +En el ejercicio anterior separamos la columna `id` de **spirantization**, esto +quedó guardado en un nuevo set de datos llamado **separado**. Sin embargo, es un +set de datos largo, ahora debe convertirlo en un set ancho, donde cada +participante represente una columna. ```{r spread, exercise = TRUE} @@ -107,14 +123,20 @@ En el ejercicio anterior separamos la columna `id` de **spirantization2**, esto ```{r spread-check} grade_result( - pass_if(~ identical(unlist(.result), unlist(spread(separado, key = participante, value = vIntensity))), "Excelente!") + pass_if(~ identical(unlist(.result), + unlist(spread( + separado, key = participante, + value = vIntensity))), + "Excelente!") ) ``` ### Regrese al set de datos original partiendo desde el set de datos ancho -En el ejercicio anterior creamo un set de datos ancho donde cada participante representaba una columna, este nuevo set se llama **ancho**. Partiendo de este nuevo set, regrese al conjunto de datos original. +En el ejercicio anterior creamo un set de datos ancho donde cada participante +representaba una columna, este nuevo set se llama **ancho**. Partiendo de este +nuevo set, regrese al conjunto de datos original. ```{r gather, exercise = TRUE} @@ -126,14 +148,22 @@ En el ejercicio anterior creamo un set de datos ancho donde cada participante re ```{r gather-check} grade_result( - pass_if(~ identical(unlist(.result), unlist(gather(ancho, participante, value = vIntensity, adv:nat))), "Excelente!") + pass_if(~ identical(unlist(.result), + unlist(gather( + ancho, participante, + value = vIntensity, + adv:nat))), + "Excelente!") ) ``` - ### Una las columnas `participante` y `numero` para volver a la columna original `id` -EN el primer ejercicio separamos la columna `id` en dos columnas nuevas: `participante` y `numero` para tener un set de datos más ordenado. Sin embargo, a veces queremos volver a la variable original para hacer algún análisis. Ahora debe unir estas dos columnas nuevas para lograr llegar a la columna original pero esta vez use un "/" para separar los valores de las columnas. +En el primer ejercicio separamos la columna `id` en dos columnas nuevas: +`participante` y `numero` para tener un set de datos más ordenado. Sin embargo, +a veces queremos volver a la variable original para hacer algún análisis. Ahora +debe unir estas dos columnas nuevas para lograr llegar a la columna original +pero esta vez use un "/" para separar los valores de las columnas. ```{r unite, exercise = TRUE} @@ -145,7 +175,13 @@ EN el primer ejercicio separamos la columna `id` en dos columnas nuevas: `partic ```{r unite-check} grade_result( - pass_if(~ identical(unlist(.result), unlist(unite(data = separado, col = id, participante, numero, sep = "/"))), "Excelente!") + pass_if(~ identical(unlist(.result), + unlist(unite( + data = separado, + col = id, + participante, + numero, + sep = "/"))), + "Excelente!") ) ``` - From 52c3b05e8da6a450945e82958efdb1f276514487 Mon Sep 17 00:00:00 2001 From: andreavargasmontero Date: Mon, 25 Oct 2021 21:43:35 -0600 Subject: [PATCH 03/29] corrige error de link --- inst/tutorials/tarea_tidyr/tarea_tidyr.Rmd | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/inst/tutorials/tarea_tidyr/tarea_tidyr.Rmd b/inst/tutorials/tarea_tidyr/tarea_tidyr.Rmd index f6f2d4e..9d268fd 100644 --- a/inst/tutorials/tarea_tidyr/tarea_tidyr.Rmd +++ b/inst/tutorials/tarea_tidyr/tarea_tidyr.Rmd @@ -40,9 +40,9 @@ tutorial_options(exercise.checker = gradethis::grade_learnr) ``` ```{r, echo=FALSE, out.width="35%", fig.align = "center"} -knitr::include_graphics(" - https://storage.googleapis.com/datos_cursos/ixpantia_introR/ixpantia_logo.png - ") +knitr::include_graphics( + "https://storage.googleapis.com/datos_cursos/ixpantia_introR/ixpantia_logo.png" + ) ``` ## Datos: **spirantization** From bdebcaa85a49fcce578ce4577539e7365f18113d Mon Sep 17 00:00:00 2001 From: andreavargasmontero Date: Mon, 25 Oct 2021 21:44:03 -0600 Subject: [PATCH 04/29] code review de tarea_tidy_data --- .../tarea_tidy_data/tarea_tidy_data.Rmd | 54 +++++++++++++------ 1 file changed, 38 insertions(+), 16 deletions(-) diff --git a/inst/tutorials/tarea_tidy_data/tarea_tidy_data.Rmd b/inst/tutorials/tarea_tidy_data/tarea_tidy_data.Rmd index 2360cf5..5a0dd2e 100644 --- a/inst/tutorials/tarea_tidy_data/tarea_tidy_data.Rmd +++ b/inst/tutorials/tarea_tidy_data/tarea_tidy_data.Rmd @@ -27,25 +27,27 @@ library(tidyr) library(untidydata) tutorial_options(exercise.checker = gradethis::grade_learnr) - -vowels <- spanish_vowels %>% +vocales <- spanish_vowels %>% select(-f2) -separado <- separate(data = vowels, col = label, - into = c("participante", "sexo", "vocal"), sep = "-") +separado <- separate(data = vocales, col = label, + into = c("participante", "sexo", "vocal"), + sep = "-") ancho <- pivot_wider(separado, names_from = vocal, values_from = f1) ``` ```{r, echo=FALSE, out.width="35%", fig.align = "center"} -knitr::include_graphics("https://storage.googleapis.com/datos_cursos/ixpantia_introR/ixpantia_logo.png") +knitr::include_graphics( + "https://storage.googleapis.com/datos_cursos/ixpantia_introR/ixpantia_logo.png" + ) ``` -## Datos: **vowels** +## Datos: **vocales** Este es un set de datos que contiene datos sobre la frecuencia del uso de las vocales en español de participantes un estudio en 1985. Contiene 750 observaciones y 4 variables. ```{r} -glimpse(spanish_vowels) +glimpse(vocales) ``` Descripción de las variables: @@ -60,7 +62,9 @@ Descripción de las variables: ### Separe la columna `label` en `participante`, `sexo` y `vocal` -La variable `label` en el conjunto de datos **vowels** está compuesta por tres elementos distintos, por ejemplo: `p01-male-a` se puede separar en `p01`, `male` y `a` y así obtenemos un conjunto de datos más ordenado y fácil de utilizar. Separe esta columna en tres nuevas columnas: `participante`, `sexo` y `vocal` +La variable `label` en el conjunto de datos **vocales** está compuesta por tres elementos distintos, por ejemplo: `p01-male-a` se puede separar en `p01`, `male` +y `a` y así obtenemos un conjunto de datos más ordenado y fácil de utilizar. +Separe esta columna en tres nuevas columnas: `participante`, `sexo` y `vocal` ```{r separate, exercise = TRUE} @@ -72,14 +76,17 @@ into = c("participante", "sexo", "vocal"), sep = "-" ```{r separate-check} grade_result( - pass_if(~ identical(unlist(.result), unlist(separate(data = vowels, col = label, - into = c("participante", "sexo", "vocal"), sep = "-"))), "Muy bien!") + pass_if(~ identical(unlist(.result), + unlist(separate(data = vocales, col = label, + into = c("participante", "sexo", "vocal"), + sep = "-"))), + "Muy bien!") ) ``` ### Una las columnas `participante`, `sexo` y `vocal` en la columna original `label` -Anteriormente separamos la columna `label` de **vowels** en tres columnas distintas, esto quedó guardado en el set de datos **separado**. Ahora una estas tres columnas de forma que volvamos a la columna `label` original pero esta vez separelo con un "_" +Anteriormente separamos la columna `label` de **vocales** en tres columnas distintas, esto quedó guardado en el set de datos **separado**. Ahora una estas tres columnas de forma que volvamos a la columna `label` original pero esta vez separelo con un "_" ```{r unite, exercise = TRUE} @@ -91,7 +98,11 @@ sep = "_" ```{r unite-check} grade_result( - pass_if(~ identical(unlist(.result), unlist(unite(separado, col="label", participante:vocal, sep = "_"))), "Muy bien!") + pass_if(~ identical(unlist(.result), + unlist(unite(separado, + col="label", participante:vocal, + sep = "_"))), + "Muy bien!") ) ``` @@ -113,14 +124,21 @@ values_from = f1 ```{r wider-check} grade_result( - pass_if(~ identical(unlist(.result), unlist(pivot_wider(separado, names_from = vocal, values_from = f1))), "Excelente!") + pass_if(~ identical(unlist(.result), + unlist( + pivot_wider(separado, + names_from = vocal, + values_from = f1))), + "Excelente!") ) ``` ### Vuelva al set de datos original (**separado**) -En el ejercicio anterior creamos un conjunto de datos ancho el cuál quedó guardado como **ancho**, ahora utilizando alguna herramienta de tidyr, vuelva al conjunto original desde donde partimos: **separado** +En el ejercicio anterior creamos un conjunto de datos ancho el cuál quedó +guardado como **ancho**, ahora utilizando alguna herramienta de tidyr, vuelva +al conjunto original desde donde partimos: **separado** ```{r longer, exercise = TRUE} @@ -132,7 +150,11 @@ En el ejercicio anterior creamos un conjunto de datos ancho el cuál quedó guar ```{r longer-check} grade_result( - pass_if(~ identical(unlist(.result), unlist(pivot_wider(separado, names_from = vocal, values_from = f1))), "Bien hecho!") + pass_if(~ identical(unlist(.result), + unlist( + pivot_wider(separado, + names_from = vocal, + values_from = f1))), + "Bien hecho!") ) ``` - From ef269ca91ca5ca5cbc7e2f5a8d03987ee109d94d Mon Sep 17 00:00:00 2001 From: andreavargasmontero Date: Mon, 25 Oct 2021 21:48:58 -0600 Subject: [PATCH 05/29] code review tarea ggplot avanzado --- .../tarea_ggplot_introduccion.Rmd | 76 +++++++++++-------- 1 file changed, 44 insertions(+), 32 deletions(-) diff --git a/inst/tutorials/tarea_ggplot_introduccion/tarea_ggplot_introduccion.Rmd b/inst/tutorials/tarea_ggplot_introduccion/tarea_ggplot_introduccion.Rmd index 769633a..16a1365 100644 --- a/inst/tutorials/tarea_ggplot_introduccion/tarea_ggplot_introduccion.Rmd +++ b/inst/tutorials/tarea_ggplot_introduccion/tarea_ggplot_introduccion.Rmd @@ -27,24 +27,29 @@ library(ggplot2) library(dplyr) library(tidyr) -txhousing <- txhousing %>% +casas_texas <- txhousing %>% mutate(month = as.factor(month)) cities <- c("Austin", "Dallas", "El Paso", "Houston", "Irving", "San Antonio") -txhousing2 <- txhousing %>% +casas_texas2 <- casas_texas %>% filter(city %in% cities) ``` ```{r, echo=FALSE, out.width="35%", fig.align = "center"} -knitr::include_graphics("https://storage.googleapis.com/datos_cursos/ixpantia_introR/ixpantia_logo.png") +knitr::include_graphics( + "https://storage.googleapis.com/datos_cursos/ixpantia_introR/ixpantia_logo.png" + ) ``` -## Datos: **txhousing** +## Datos: **casas_texas** + +Para la tareas usaremos el conjunto de datos **casas_texas**, el cual contiene +información sobre la industria de las bienes raíces en Texas, Estados Unidos, +del 2000 al 2015. El set de datos contiene 8602 observaciones y 9 variables. -Para la tareas usaremos el conjunto de datos **txhousing**, el cual contiene información sobre la industria de las bienes raíces en Texas, Estados Unidos, del 2000 al 2015. El set de datos contiene 8602 observaciones y 9 variables. ```{r} -glimpse(txhousing) +glimpse(casas_texas) ``` Descripción de las variables @@ -61,87 +66,94 @@ Descripción de las variables | `inventory` | Tiempo necesario para que se vendan todos los listados activos al paso actual de las ventas | | `date` | Fecha en estudio | - ## Ejercicios ### 1. Grafique la variable `volume` de tal forma que podamos ver su distribucion -En el set de datos `txhousing` hay una variable llamada `volume` que representa el valor total de las ventas realizadas. Usando algunos de los `geoms` de ggplot, grafique esta variable de tal forma que se logre ver su distribucion. +En el set de datos `casas_texas` hay una variable llamada `volume` que +representa el valor total de las ventas realizadas. Usando algunos de los +`geoms` de ggplot, grafique esta variable de tal forma que se logre ver su +distribución. ```{r volume, exercise = TRUE} -ggplot(txhousing) - +ggplot(casas_texas) ``` ```{r volume-solution} -ggplot(txhousing, aes(volume)) + +ggplot(casas_texas, aes(volume)) + geom_density() # o también -ggplot(txhousing, aes(volume)) + +ggplot(casas_texas, aes(volume)) + geom_histogram() ``` - ### 2. Cree un gráfico de puntos sencillo que represente la cantidad de ventas sobre los años -En **txhousing** tenemos una variables llamada `year` que tiene los años del 2000 al 2015 en que se dieron ests ventas y otra variable, `sales` con la cantidad de ventas hechas en la ciudad a la fecha indicada. Ahora utilice estas variables para hacer un gráfico que muestres la cantidad de ventas realizadas para cada año en forma de puntos. +En **casas_texas** tenemos una variables llamada `year` que tiene los años del +2000 al 2015 en que se dieron ests ventas y otra variable, `sales` con la +cantidad de ventas hechas en la ciudad a la fecha indicada. Ahora utilice estas variables para hacer un gráfico que muestres la cantidad de ventas realizadas +para cada año en forma de puntos. ```{r point, exercise = TRUE} -ggplot(txhousing) +ggplot(casas_texas) ``` ```{r point-solution} -ggplot(txhousing, aes(x = year, y = sales)) + +ggplot(casas_texas, aes(x = year, y = sales)) + geom_point() ``` - ### 3. Cree un gráfico que permita ver la relación entre `volume` y `sales` -En `txhousing` hay una variable que se llama `volume` que representa el valor total de las ventas realizadas y otra llamada `sales` que contiene el número de ventas realizadas. Grafique la relación de estas variables utilizando `geom_smooth` y `geom_point`. Utilice el método "lm" y una confianza del 90%. +En `casas_texas` hay una variable que se llama `volume` que representa el valor total de las ventas realizadas y otra llamada `sales` que contiene el número de ventas realizadas. Grafique la relación de estas variables utilizando +`geom_smooth` y `geom_point`. Utilice el método "lm" y una confianza del 90%. + ```{r lm, exercise = TRUE} -ggplot(txhousing) +ggplot(casas_texas) ``` ```{r lm-solution} -ggplot(txhousing, aes(x = sales, y = volume)) + +ggplot(casas_texas, aes(x = sales, y = volume)) + geom_smooth(aes(x = sales, y = volume), method = "lm", level = 0.90) + geom_point() ``` - ### 4. Haga un gráfico que muestre la cantidad de listados por año para cada ciudad -Para este ejercicio utilizaremos el set de datos **txhousing2** para que sea visualmente más entendible ya que restringe la cantidad de datos. +Para este ejercicio utilizaremos el set de datos **casas_texas2** para que sea visualmente más entendible ya que restringe la cantidad de datos. + +La variable `listings` del conjunto de datos **casas_texas2** describe la +cantidad de listados activos, además, la variable `year` describe el año y la variable `city`, el nombre de la ciudad de Texas en cada caso. Utilizando estas +tres variables obtenga un gráfico que muestre la cantidad de listados por año +para cada una de las ciudades. -La variable `listings` del conjunto de datos **txhousing2** describe la cantidad de listados activos, además, la variable `year` describe el año y la variable `city`, el nombre de la ciudad de Texas en cada caso. Utilizando estas tres variables obtenga un gráfico que muestre la cantidad de listados por año para cada una de las ciudades. ```{r fill, exercise = TRUE} -ggplot(txhousing2) +ggplot(casas_texas2) ``` ```{r fill-solution} -ggplot(txhousing2) + +ggplot(casas_texas2) + geom_col(aes(year, listings, fill = city)) ``` +### 5. Haga un gráfico de cajas para las 6 ciudades de **casas_texas** según su cantidad de listados activos -### 5. Haga un gráfico de cajas para las 6 ciudades de **txhousing** según su cantidad de listados activos +En **casas_texas** la variable `city` contempla solamente 6 ciudades de Texas, +además este conjunto de datos tiene una variable llamada `listings` que contiene +la cantidad de listados activos. Cree un gráfico de cajas que muestre la +distribución de la variable `listings` para cada una de las ciudades. -En **txhousing** la variable `city` contempla solamente 6 ciudades de Texas, además este conjunto de datos tiene una variable llamada `listings` que contiene la cantidad de listados activos. Cree un gráfico de cajas que muestre la distribución de la variable `listings` para cada una de las ciudades. ```{r box, exercise = TRUE} -ggplot(txhousing2) +ggplot(casas_texas2) ``` ```{r box-solution} -ggplot(txhousing2) + +ggplot(casas_texas2) + geom_boxplot(aes(x = city, y = listings)) ``` - - - From 5091f5d7e008b7cc1f7adf6d9debdc83ec89c0b7 Mon Sep 17 00:00:00 2001 From: andreavargasmontero Date: Mon, 25 Oct 2021 21:51:54 -0600 Subject: [PATCH 06/29] code review tare ggplot --- .../tarea_ggplot_avanzado.Rmd | 78 +++++++++++++------ 1 file changed, 54 insertions(+), 24 deletions(-) diff --git a/inst/tutorials/tarea_ggplot_avanzado/tarea_ggplot_avanzado.Rmd b/inst/tutorials/tarea_ggplot_avanzado/tarea_ggplot_avanzado.Rmd index 42db60d..020ee13 100644 --- a/inst/tutorials/tarea_ggplot_avanzado/tarea_ggplot_avanzado.Rmd +++ b/inst/tutorials/tarea_ggplot_avanzado/tarea_ggplot_avanzado.Rmd @@ -35,12 +35,17 @@ weather <- Weather %>% ``` ```{r, echo=FALSE, out.width="35%", fig.align = "center"} -knitr::include_graphics("https://storage.googleapis.com/datos_cursos/ixpantia_introR/ixpantia_logo.png") +knitr::include_graphics( + "https://storage.googleapis.com/datos_cursos/ixpantia_introR/ixpantia_logo.png" + ) ``` ## Datos: **weather** -En esta tarea vamos a estar utilizando el set de datos **weather** del paquete `mosaicData`. Es un conjunto de datos que contiene información sobre el clima en 5 ciudades del mundo para los años: 2016 y 2017. Contiene 3655 observaciones y 25 variables. +En esta tarea vamos a estar utilizando el set de datos **weather** del paquete +`mosaicData`. Es un conjunto de datos que contiene información sobre el clima +en 5 ciudades del mundo para los años: 2016 y 2017. Contiene 3655 observaciones +y 25 variables. ```{r} glimpse(weather) @@ -78,10 +83,11 @@ Descripción de las variables ## Ejercicios - ### 1. Visualice los NAs -Es importante conocer dónde y cuántos valores faltantes tenemos en un set de datos. Visualice los NAs de la base de datos **weather** +Es importante conocer dónde y cuántos valores faltantes tenemos en un set de +datos. Visualice los NAs de la base de datos **weather** + ```{r vis, exercise = TRUE} ``` @@ -92,7 +98,12 @@ vis_dat(weather) ### 2. Cree un gráfico con una linea de regresión suavizada para la temperatura promedio a través de los años -En **weather** tenemos una variable llamada `avg_temp` que contiene la temperatura promedio presentada cada día y además el día se ve reflejado en la variable `date`. Cree un gráfico que muestre una línea de regresión suavizada para la temperatura promedio a través del tiempo contemplado. Excluya el error estándar +En **weather** tenemos una variable llamada `avg_temp` que contiene la +temperatura promedio presentada cada día y además el día se ve reflejado en la +variable `date`. Cree un gráfico que muestre una línea de regresión suavizada +para la temperatura promedio a través del tiempo contemplado. Excluya el error +estándar + ```{r smooth, exercise = TRUE} ggplot(weather) @@ -100,13 +111,18 @@ ggplot(weather) ```{r smooth-solution} ggplot(weather, aes(x = date, y = avg_temp)) + -geom_smooth(se = FALSE) + geom_smooth(se = FALSE) ``` ### 3. Cree un gráfico de barras donde se muestre la velocidad promedio del viento por día para cada ciudad -Al variable `avg_wind` en **weather** muestra le velocidad promedio del viento para cada fecha (`date`), además, tenemos en `city` el nombre de la ciudad donde se recolectó cada dato. Utilizando estas tres variables cree un gráfico que muestra la velocidad promedio del viento a través del tiempo, en cada ciudad. Las etiquetas de la fecha deben mostrar solo el mes y el año y para que se vea más ordenado, "corte" la fecha cada 5 meses. +Al variable `avg_wind` en **weather** muestra le velocidad promedio del viento +para cada fecha (`date`), además, tenemos en `city` el nombre de la ciudad +donde se recolectó cada dato. Utilizando estas tres variables cree un gráfico +que muestra la velocidad promedio del viento a través del tiempo, en cada +ciudad. Las etiquetas de la fecha deben mostrar solo el mes y el año y para que +se vea más ordenado, "corte" la fecha cada 5 meses. ```{r bar, exercise = TRUE} ggplot(weather) @@ -123,10 +139,13 @@ ggplot(data = weather, aes(x = date, y = avg_wind, theme_minimal(base_size = 10) ``` - ### 4. Cree un gráfico de barras apiladas que muestre la humedad promedio en cada mes según los eventos meteotológicos que se presentaron -En **weather** tenemos una variable llamada `avg_humidity` con el promedio de humedad que se presentó cada día. Además, la variable `month` con solamente el mes de la fecha registrada y `events` con el o los eventos meteorológicos que se presentaron cada día. Ustede debe crear un gráfico que muestre la relación entre los eventos meteorológicos y la humedad promedio en cada mes. Coloque las etiquetas correspondientes a cada eje, título, leyenda y subtítulo. Además, utilice un "tema" (`theme_`) y controle el tamaño de las letras. +En **weather** tenemos una variable llamada `avg_humidity` con el promedio de humedad que se presentó cada día. Además, la variable `month` con solamente el +mes de la fecha registrada y `events` con el o los eventos meteorológicos que se presentaron cada día. Ustede debe crear un gráfico que muestre la relación entre +los eventos meteorológicos y la humedad promedio en cada mes. Coloque las +etiquetas correspondientes a cada eje, título, leyenda y subtítulo. Además, +utilice un "tema" (`theme_`) y controle el tamaño de las letras. ```{r bar2, exercise = TRUE} ggplot(weather) @@ -137,20 +156,25 @@ ggplot(weather) ggplot(weather, aes(x = month, y = avg_humidity, group = events, fill = events)) + -geom_bar(stat = "summary") + -scale_fill_viridis_d() + -xlab("Mes") + ylab("Humedad (g/m3)") + -labs(title = "Humedad promedio" , - subtitle = "por mes y evento", - fill = "Evento") + -theme_bw(base_size = 14) + -theme(axis.text.x = element_text(angle = 45)) + geom_bar(stat = "summary") + + scale_fill_viridis_d() + + xlab("Mes") + ylab("Humedad (g/m3)") + + labs(title = "Humedad promedio" , + subtitle = "por mes y evento", + fill = "Evento") + + theme_bw(base_size = 14) + + theme(axis.text.x = element_text(angle = 45)) ``` ### 5. Muestre la densidad de la variable `avg_hg` con un histograma y la función de densidad y muestre la media de esta distribución con una línea -Grafique la distribución de densidad de la variable `avg_hg` (presión del nivel del mar promedio en pulgadas de mercurio) con la densidad como tal y un histograma. Debe asegurarse de que el histograma tenga una transparencia suficiente para que el histograma se logre diferenciar. Además, agregue una línea que muestre la media general de la vriable, haga que esta línea esté compuesta de puntos, sea de tamaño 2 y azul. +Grafique la distribución de densidad de la variable `avg_hg` (presión del nivel +del mar promedio en pulgadas de mercurio) con la densidad como tal y un +histograma. Debe asegurarse de que el histograma tenga una transparencia +suficiente para que el histograma se logre diferenciar. Además, agregue una +línea que muestre la media general de la vriable, haga que esta línea esté +compuesta de puntos, sea de tamaño 2 y azul. ```{r hist, exercise = TRUE} ggplot(weather) @@ -165,10 +189,14 @@ ggplot(weather, aes(x = avg_hg)) + color = "blue", linetype = "dotted", size = 2) ``` - ### 6. Cree un gráfico interactivo donde se muestre el punto de rocío promedio a lo largo del tiempo para cada ciudad -Utilizando ggplotly, convierta un gráfico normal a un gráfico interactivo que muestre el comportamiento del punto de rocío promedio (`avg_dewpt`) a través del tiempo (`date`) para cada ciudad (`city`). En el eje x, para la fecha, utilice el formato: año, día, mes y "corte" la fecha cada dos meses, además, haga que las etiquetas de este eje tengan un ángulo de 90. Recuerde poner las etiquetas correspondientes. +Utilizando ggplotly, convierta un gráfico normal a un gráfico interactivo que +muestre el comportamiento del punto de rocío promedio (`avg_dewpt`) a través del +tiempo (`date`) para cada ciudad (`city`). En el eje x, para la fecha, utilice +el formato: año, día, mes y "corte" la fecha cada dos meses, además, haga que +las etiquetas de este eje tengan un ángulo de 90. Recuerde poner las etiquetas +correspondientes. ```{r plotly, exercise = TRUE} interactivo <- ggplot(weather) @@ -176,15 +204,17 @@ interactivo <- ggplot(weather) ``` ```{r plotly-solution} -interactivo <- ggplot(weather, aes(x = date, y = avg_dewpt, - color = city)) + +interactivo <- ggplot(weather, + aes(x = date, + y = avg_dewpt, + color = city)) + geom_line() + scale_color_viridis_d() + scale_x_date(date_labels = "%Y-%d-%m", date_breaks = "2 month") + - xlab("Fecha") + ylab("Punto de rocío (grados F)") + + xlab("Fecha") + + ylab("Punto de rocío (grados F)") + labs(title = "Punto de rocío promedio", color = "Ciudad") + theme(axis.text.x = element_text(angle = 45)) ggplotly(interactivo) ``` - From e09de57e48ef3fc5e3d5d590b3faba8833562b9b Mon Sep 17 00:00:00 2001 From: andreavargasmontero Date: Mon, 25 Oct 2021 22:02:53 -0600 Subject: [PATCH 07/29] code review tarea estructuras --- .../tarea_estructuras_r.Rmd | 53 ++++++++++++++----- 1 file changed, 39 insertions(+), 14 deletions(-) diff --git a/inst/tutorials/tarea_estructuras_r/tarea_estructuras_r.Rmd b/inst/tutorials/tarea_estructuras_r/tarea_estructuras_r.Rmd index d2c00f0..322b76c 100644 --- a/inst/tutorials/tarea_estructuras_r/tarea_estructuras_r.Rmd +++ b/inst/tutorials/tarea_estructuras_r/tarea_estructuras_r.Rmd @@ -28,7 +28,8 @@ tutorial_options(exercise.checker = gradethis::grade_learnr) url <- "https://storage.googleapis.com/datos_cursos/peajes%20(1).xlsx" temp = tempfile(fileext = ".xlsx") -download.file(url, destfile=temp, mode='wb') +download.file(url, destfile = temp, mode = 'wb') + peajes <- readxl::read_xlsx(temp) %>% clean_names() %>% mutate(x2016 = as.numeric(x2016), @@ -36,18 +37,20 @@ peajes <- readxl::read_xlsx(temp) %>% ``` ```{r, echo=FALSE, out.width="35%", fig.align = "center"} -knitr::include_graphics("https://storage.googleapis.com/datos_cursos/ixpantia_introR/ixpantia_logo.png") +knitr::include_graphics( + "https://storage.googleapis.com/datos_cursos/ixpantia_introR/ixpantia_logo.png" + ) ``` ## Datos: **peajes** Este conjunto de datos contiene información sobre peajes de Costa Rica. Consiste de 36 observaciones y 6 variables. + ```{r} glimpse(peajes) ``` - Descripción de las variables: | Variable | Descripción | @@ -77,8 +80,10 @@ grade_result( ``` ### ¿Cuáles son los requisitos de datos ordenados (tidy data)? + ```{r sub2, echo=FALSE} -question("¿Cuáles son los requisitos de tidy data? (Marque todas las opciones correctas)", +question( + "¿Cuáles son los requisitos de tidy data? (Marque todas las opciones correctas)", answer("Cada Variable debe de tener su propia columna", correct = TRUE), answer("Cada Observación debe de tener su propia fila", correct = TRUE), answer("Cada Variable debe tener su propia fila "), @@ -97,7 +102,9 @@ tercero. ### Obtenga la quinta fila del data frame "peajes" -En el set de datos peajes hay 36 filas, ahora obtenga la información de la quinta fila solamente. +En el set de datos peajes hay 36 filas, ahora obtenga la información de la +quinta fila solamente. + ```{r quinta, exercise = TRUE, exercise.eval = FALSE} ``` @@ -114,7 +121,9 @@ grade_result( ### Obtenga los peajes de la ruta 27 -En el set de datos hay una columna llamada `numero_de_ruta` que indica el número de carretera en la que se encuentra cada peaje. Obtenga la información referente a aquellos peajes que se encuentran únicamente en la ruta 27. +En el set de datos hay una columna llamada `numero_de_ruta` que indica el +número de carretera en la que se encuentra cada peaje. Obtenga la información +referente a aquellos peajes que se encuentran únicamente en la ruta 27. ```{r 27, exercise = TRUE, exercise.eval = FALSE} @@ -126,13 +135,18 @@ En el set de datos hay una columna llamada `numero_de_ruta` que indica el númer ```{r 27-check} grade_result( - pass_if(~ identical(unlist(.result), unlist(subset(peajes, numero_de_ruta == "27"))), "¡Excelente!") + pass_if(~ identical(unlist(.result), + unlist(subset(peajes, numero_de_ruta == "27"))), + "¡Excelente!") ) ``` ### Obtenga los peajes que en el 2015 recogieron más de 16000 -En el set de datos hay una columna que se llama `x2015` que contiene los montos recolectados por cada peaje en este año. Ahora obtenga aquellos peajes que en este año recolectaron más de 16000 +En el set de datos hay una columna que se llama `x2015` que contiene los montos +recolectados por cada peaje en este año. Ahora obtenga aquellos peajes que en +este año recolectaron más de 16000 + ```{r 16mil, exercise = TRUE, exercise.eval = FALSE} ``` @@ -145,16 +159,19 @@ En el set de datos hay una columna que se llama `x2015` que contiene los montos `x2015` ``` - ```{r 16mil-check} grade_result( - pass_if(~ identical(unlist(.result), unlist(subset(peajes, `x2015` >= 16000))), "¡Excelente!") + pass_if(~ identical(unlist(.result), + unlist(subset(peajes, `x2015` >= 16000))), + "¡Excelente!") ) ``` ### Subset con peajes que en el 2016 recogieran más de 14000 y menos de 38000 -En el conjunto de datos hay una columna que se llama `x2016` que contiene los montos recolectados por cada peaje en este año. Obtenga aquellos peajes que ese año recolectaron más de 14000 pero menos de 38000. +En el conjunto de datos hay una columna que se llama `x2016` que contiene los +montos recolectados por cada peaje en este año. Obtenga aquellos peajes que ese +año recolectaron más de 14000 pero menos de 38000. ```{r sub, exercise = TRUE, exercise.eval = FALSE} @@ -166,7 +183,12 @@ En el conjunto de datos hay una columna que se llama `x2016` que contiene los mo ```{r sub-check} grade_result( - pass_if(~ identical(unlist(.result), unlist(subset(peajes, peajes$`x2016` > 14000 & peajes$`x2016` < 38000))), "¡Muy bien!") + pass_if(~ identical(unlist(.result), + unlist( + subset(peajes, + peajes$`x2016` > 14000 & peajes$`x2016` < 38000) + )), + "¡Muy bien!") ) ``` @@ -175,7 +197,7 @@ grade_result( En el set de datos hay tres columnas referentes a los montos recolectados en los peajes en tres años distintos, estas son `x2015`, `x2016` y `x2017`. Ahora cree una nueva columna que contenga la suma de los montos recolectados en estos años -para cada peaje. LLame a esa columna `suma` +para cada peaje. Llame a esa columna `suma` ```{r suma, exercise = TRUE, exercise.eval = FALSE} @@ -187,7 +209,10 @@ peajes$suma ```{r suma-check} grade_result( - pass_if(~ identical(unlist(.result), unlist(peajes$suma <- peajes$`x2015` + peajes$`x2016` + peajes$`x2017`)), "¡Bien hecho!") + pass_if(~ identical(unlist(.result), + unlist( + peajes$suma <- peajes$`x2015` + peajes$`x2016` + peajes$`x2017`)), + "¡Bien hecho!") ) ``` From 6ae15a806b38b42e06b01b55eeb40c6b65f19dee Mon Sep 17 00:00:00 2001 From: andreavargasmontero Date: Mon, 25 Oct 2021 22:04:57 -0600 Subject: [PATCH 08/29] style review tarea estilo codigo --- .../tarea_estilo_codigo.Rmd | 61 +++++++++++++------ 1 file changed, 44 insertions(+), 17 deletions(-) diff --git a/inst/tutorials/tarea_estilo_codigo/tarea_estilo_codigo.Rmd b/inst/tutorials/tarea_estilo_codigo/tarea_estilo_codigo.Rmd index c1216ee..4722cdf 100644 --- a/inst/tutorials/tarea_estilo_codigo/tarea_estilo_codigo.Rmd +++ b/inst/tutorials/tarea_estilo_codigo/tarea_estilo_codigo.Rmd @@ -26,10 +26,18 @@ knitr::include_graphics("https://storage.googleapis.com/datos_cursos/ixpantia_in ## Introducción -Hay muchas formas de escribir código en R. Entre mas código escribes, y sobretodo entre mas código tienes que leer, más apreciarás un estilo uniforme. Te permitirá leer tu propio código y volver a entenderlo más fácilmente después de un largo tiempo sin haberlo visto. Además, un estilo uniforme te permitirá trabajar más efectivamente con otros. - -Aquí podrás encontrar los diferentes elementos que pueden estar en un guía de estilo. Esta basado en el guia de estilo de Hadley Wickham. Este a su vez esta basado en el guia de estilo de Google. Además, se incluyen las sugerencias que son relevantes para hispanohablantes. Esto porque en el Castellano estamos acostumbrados, entre otras cosas, a tildes, eñes y otros caracteres que necesitan su propia discusión. - +Hay muchas formas de escribir código en R. Entre mas código escribes, y +sobretodo entre mas código tienes que leer, más apreciarás un estilo uniforme. +Te permitirá leer tu propio código y volver a entenderlo más fácilmente después +de un largo tiempo sin haberlo visto. Además, un estilo uniforme te permitirá +trabajar más efectivamente con otros. + +Aquí podrás encontrar los diferentes elementos que pueden estar en un guía de +estilo. Esta basado en el guia de estilo de Hadley Wickham. Este a su vez esta +basado en el guia de estilo de Google. Además, se incluyen las sugerencias que +son relevantes para hispanohablantes. Esto porque en el Castellano estamos +acostumbrados, entre otras cosas, a tildes, eñes y otros caracteres que +necesitan su propia discusión. ## Nomenclatura @@ -37,7 +45,8 @@ Aquí podrás encontrar los diferentes elementos que pueden estar en un guía de #### Tip 1 -Los archivos deben tener un nombre descriptivo, no tener caracteres especiales (tildes, eñes) y terminar en .R. +Los archivos deben tener un nombre descriptivo, no tener caracteres especiales +(tildes, eñes) y terminar en .R. #### Ejercicio 1 @@ -69,7 +78,10 @@ question("¿Cuál (es) de estos nombres de archivos es (son) correcto (s)?", #### Tip 3 -Nombres de variables y de funciones deben ser en minúscula y que se ha de usar un guión bajo (_) para separar palabras dentro de un nombre. Usar sustantivos para los nombres de las variables y verbos para las funciones. Nunca uses caracteres especiales como tildes y eñes en tus nombres de objetos. +Nombres de variables y de funciones deben ser en minúscula y que se ha de usar +un guión bajo (_) para separar palabras dentro de un nombre. Usar sustantivos +para los nombres de las variables y verbos para las funciones. Nunca uses +caracteres especiales como tildes y eñes en tus nombres de objetos. #### Ejercicio 3 ```{r nombres_objs} @@ -83,7 +95,8 @@ question("¿Cuál (es) de estos nombres de objetos es (son) correcto (s)?", #### Tip 4 -Si usas nombres de funciones que ya están en uso es probable que generes confusión. Trata de evitarlo hasta donde sea posible. +Si usas nombres de funciones que ya están en uso es probable que generes +confusión. Trata de evitarlo hasta donde sea posible. #### Ejercicio 4 ```{r nombres_objs2} @@ -101,9 +114,12 @@ question("¿Cuál (es) de estos nombres de funciones es (son) correcto (s)?", #### Tip 5 -Antes y después de todos los operadores infijos va un espacio (=, +, <-, etc). Esto aplica aún para el signo equivalente (=) en las llamada de una función. No hay espacios antes de una coma, pero una coma siempre es seguida por un espacio. +Antes y después de todos los operadores infijos va un espacio (=, +, <-, etc). +Esto aplica aún para el signo equivalente (=) en las llamada de una función. No +hay espacios antes de una coma, pero una coma siempre es seguida por un espacio. #### Ejercicio 5 + ```{r espacios_num} question("¿Cuál (es) de estos comandos es (son) correcto (s)?", answer("profundidad<-round((pies + pulgadas/12), 2)"), @@ -119,6 +135,7 @@ question("¿Cuál (es) de estos comandos es (son) correcto (s)?", No se usan espacios para `:`, `::` ni `:::`. #### Ejercicio 6 + ```{r espacios_dospts} question("¿Cuál (es) de estos comandos es (son) correcto (s)?", answer("x <- 2:23", correct = TRUE), @@ -130,9 +147,11 @@ question("¿Cuál (es) de estos comandos es (son) correcto (s)?", #### Tip 7 -Antes del paréntesis izquierdo va un espacio, a no ser que estés llamando una función en cual caso no se usa un espacio. +Antes del paréntesis izquierdo va un espacio, a no ser que estés llamando una +función en cual caso no se usa un espacio. #### Ejercicio 7 + ```{r espacios_izq} question("¿Cuál (es) de estos comandos es (son) correcto (s)?", answer("qplot(x, y)", correct = TRUE), @@ -144,14 +163,16 @@ question("¿Cuál (es) de estos comandos es (son) correcto (s)?", #### Tip 8 -Cuando quieras introducir mas orden en el código alineándolo, por ejemplo, sobre los símbolos de igualdad, está bien usar espacios para tal efecto - +Cuando quieras introducir mas orden en el código alineándolo, por ejemplo, +sobre los símbolos de igualdad, está bien usar espacios para tal efecto #### Tip 9 -Los paréntesis y corchetes ([]) no llevan espacios a su alrededor. Si hay una coma, aplican las convenciones que se mencionaron antes. +Los paréntesis y corchetes ([]) no llevan espacios a su alrededor. Si hay una +coma, aplican las convenciones que se mencionaron antes. #### Ejercicio 9 + ```{r parent} question("¿Cuál (es) de estos comandos es (son) correcto (s)?", answer("if ( depurando ) x <- 34"), @@ -166,25 +187,32 @@ question("¿Cuál (es) de estos comandos es (son) correcto (s)?", #### Tip 10 -No uses punto y coma dentro del código. No es necesario, y prácticamente ya no se usa. +No uses punto y coma dentro del código. No es necesario, y prácticamente ya no +se usa. ### Llaves #### Tip 11 -Abrir una llave nunca debería ocurrir en su propia línea y siempre se sigue con una línea nueva. Una llave que cierra siempre debe ir en su propia línea a menos que sea else. Siempre usa llaves cuando estás usando construcciones con “if”, aún cuando no es posible no hacerlo. + +Abrir una llave nunca debería ocurrir en su propia línea y siempre se sigue con +una línea nueva. Una llave que cierra siempre debe ir en su propia línea a menos +que sea else. Siempre usa llaves cuando estás usando construcciones con “if”, +aún cuando no es posible no hacerlo. ### Longitud de lineas #### Tip 12 -Trata de limitar tu código a una longitud de 80 caracteres por linea. Esto cabe cómodamente en una página impresa a un tamaño de la fuente razonable. +Trata de limitar tu código a una longitud de 80 caracteres por linea. Esto cabe +cómodamente en una página impresa a un tamaño de la fuente razonable. ### Asignación #### Tip 13 -Es mejor usar solo `<-` para asignación en vez de `=` y usar el símbolo de igualdad solamente para argumentos dentro de funciones. +Es mejor usar solo `<-` para asignación en vez de `=` y usar el símbolo de +igualdad solamente para argumentos dentro de funciones. #### Ejercicio 13 ```{r asigna} @@ -193,4 +221,3 @@ question("¿Cuál (es) de estos comandos es (son) correcto (s)?", answer("y = 23") ) ``` - From e27e68d20b520d19f1eeb4c7d7ebaee8c90683ae Mon Sep 17 00:00:00 2001 From: andreavargasmontero Date: Mon, 25 Oct 2021 22:07:39 -0600 Subject: [PATCH 09/29] style review tarea ejercicios resumir --- .../tarea_ejercicios_resumir.Rmd | 54 ++++++++++++------- 1 file changed, 36 insertions(+), 18 deletions(-) diff --git a/inst/tutorials/tarea_ejercicios_resumir/tarea_ejercicios_resumir.Rmd b/inst/tutorials/tarea_ejercicios_resumir/tarea_ejercicios_resumir.Rmd index 52bbfc6..fe5cc65 100644 --- a/inst/tutorials/tarea_ejercicios_resumir/tarea_ejercicios_resumir.Rmd +++ b/inst/tutorials/tarea_ejercicios_resumir/tarea_ejercicios_resumir.Rmd @@ -29,14 +29,14 @@ library(lubridate) library(gradethis) superheroes <- tibble::tribble( - ~nombre, ~bando, ~sexo, ~editor, - "Magneto", "villano", "hombre", "Marvel", - "Storm", "heroe", "mujer", "Marvel", - "Mystique", "villano", "mujer", "Marvel", - "Batman", "heroe", "hombre", "DC", - "Joker", "villano", "hombre", "DC", - "Catwoman", "villano", "mujer", "DC", - "Hellboy", "heroe", "hombre", "Dark Horse" + ~nombre, ~bando, ~sexo, ~editor, + "Magneto", "villano", "hombre", "Marvel", + "Storm", "heroe", "mujer", "Marvel", + "Mystique", "villano", "mujer", "Marvel", + "Batman", "heroe", "hombre", "DC", + "Joker", "villano", "hombre", "DC", + "Catwoman", "villano", "mujer", "DC", + "Hellboy", "heroe", "hombre", "Dark Horse" ) editores <- tibble::tribble( @@ -50,7 +50,9 @@ tutorial_options(exercise.checker = gradethis::grade_learnr) ``` ```{r, echo=FALSE, out.width="35%", fig.align = "center"} -knitr::include_graphics("https://storage.googleapis.com/datos_cursos/ixpantia_introR/ixpantia_logo.png") +knitr::include_graphics( + "https://storage.googleapis.com/datos_cursos/ixpantia_introR/ixpantia_logo.png" + ) ``` ## Datos @@ -61,6 +63,7 @@ Para esta tarea usaremos 2 conjuntos de datos distintos: Este conjunto de datos contiene datos sobre distintos superhéroes y villanos de distintas compañías. Contiene 7 observaciones y 4 variables. + ```{r} glimpse(superheroes) ``` @@ -76,7 +79,9 @@ Descripción de las columnas: ### **editores** -Contiene información sobre tres compañías de comics. Tiene 3 observaciones y 2 variables. +Contiene información sobre tres compañías de comics. Tiene 3 observaciones y 2 +variables. + ```{r} glimpse(editores) ``` @@ -92,8 +97,14 @@ Descripción de las columnas: ### Haga un `join` de forma que aparezca el editor y el año de fundación de los superhéroes, pero solo de aquellos que tienen un editor en la base editores -En el conjunto de datos **superheroes** tenemos datos sobre distintos superhéroes, -incluyendo la compañía de donde provienen, mientras que en **editores** tenemos información sobre las compañías. Utilice alguno de los `joins` para unir ambos conjuntos de datos de forma que se obtenga un nuevo data frame con la información de los superhéroes, su editor y el año de fundación. Si un superhéroe tiene un editor que no aparece en **editores** debe de ser excluido. +En el conjunto de datos **superheroes** tenemos datos sobre distintos +superhéroes, incluyendo la compañía de donde provienen, mientras que en +**editores** tenemos información sobre las compañías. Utilice alguno de los +`joins` para unir ambos conjuntos de datos de forma que se obtenga un nuevo +data frame con la información de los superhéroes, su editor y el año de +fundación. Si un superhéroe tiene un editor que no aparece en **editores** debe +de ser excluido. + ```{r inner, exercise = TRUE} ``` @@ -112,9 +123,10 @@ grade_result( ### Realice un `join` de forma que a los datos de **superheroes** se les agrege la columna `anio_fundacion' sin excluir ningún superhéroe o villano -Anteriormente hicimos un `join` que agregaba el año de fundación de los editores, excluyendo a aquellos personajes que no tenían un editor con observaciones en -**editores**. Ahora debe de hacer otro `join` que no excluya a ningún personaje -y además agregar la columna de `anio_fundacion`. +Anteriormente hicimos un `join` que agregaba el año de fundación de los +editores, excluyendo a aquellos personajes que no tenían un editor con +observaciones en **editores**. Ahora debe de hacer otro `join` que no excluya a +ningún personaje y además agregar la columna de `anio_fundacion`. ```{r left, exercise = TRUE} @@ -137,6 +149,7 @@ grade_result( En este ejercicio queremos obtener un conjunto de datos que contenga únicamente los personajes que tengan un editor dentro del conjunto de datos **editores**. Los demás deben de ser excluidos. + ```{r semi, exercise = TRUE} ``` @@ -156,7 +169,10 @@ grade_result( ### Realice un `join` de tal forma que resulte un conjunto de datos con aquellos superhéroes que tienen un editor que **NO** aparece en **editores** Anteriormente unimos los dos conjuntos de datos de tal forma que el resultado -excluyera aquellos personajes que tuvieran un editor que no aparecía en **editores**. Ahora debe de hacer lo opuesto, el resultado debe incluir solo aquellos personajes que tienen un editor que **NO** aparece en **editores** +excluyera aquellos personajes que tuvieran un editor que no aparecía en +**editores**. Ahora debe de hacer lo opuesto, el resultado debe incluir solo +aquellos personajes que tienen un editor que **NO** aparece en **editores** + ```{r anti, exercise = TRUE} ``` @@ -175,7 +191,10 @@ grade_result( ### Realice un `join` de tal forma que resulte un conjunto de datos con la información de ambos conjuntos de datos, sin excluir ninguna observación. -En este ejercicio debe obtener un conjunto de datos que una la información de ambos conjuntos de datos sin excluir ninguna observación, aún si esto resulta en valores faltantes en algunas de las columnas. +En este ejercicio debe obtener un conjunto de datos que una la información de +ambos conjuntos de datos sin excluir ninguna observación, aún si esto resulta +en valores faltantes en algunas de las columnas. + ```{r full, exercise = TRUE} ``` @@ -191,4 +210,3 @@ grade_result( "¡Muy bien!") ) ``` - From ea65a49cd8476f4d9b29880a9471c78ea1cdc82b Mon Sep 17 00:00:00 2001 From: andreavargasmontero Date: Mon, 25 Oct 2021 22:09:01 -0600 Subject: [PATCH 10/29] style review tarea dplyr --- inst/tutorials/tarea_dplyr/tarea_dplyr.Rmd | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/inst/tutorials/tarea_dplyr/tarea_dplyr.Rmd b/inst/tutorials/tarea_dplyr/tarea_dplyr.Rmd index 73557de..9b552d1 100644 --- a/inst/tutorials/tarea_dplyr/tarea_dplyr.Rmd +++ b/inst/tutorials/tarea_dplyr/tarea_dplyr.Rmd @@ -42,14 +42,16 @@ tutorial_options(exercise.checker = gradethis::grade_learnr) ``` ```{r, echo=FALSE, out.width="35%", fig.align = "center"} -knitr::include_graphics("https://storage.googleapis.com/datos_cursos/ixpantia_introR/ixpantia_logo.png") +knitr::include_graphics( + "https://storage.googleapis.com/datos_cursos/ixpantia_introR/ixpantia_logo.png" + ) ``` - ## Datos: **estaciones** Este conjunto de datos contiene la temperatura promedio por estación. En total hay 16 observaciones y 3 variables. + ```{r} glimpse(estaciones) ``` @@ -66,9 +68,10 @@ Descripción de las variables: ### Muestre las observaciones que se refieran a "invierno" solamente -En el conjunto de datos *estaciones* hay una columna llamada `temporada` la cual -es una variable categórica con 4 categorías: invierno, verano, primavera y otoño. -Obtenga la información referente a "invierno" solamente. +En el conjunto de datos *estaciones* hay una columna llamada `temporada` la +cual es una variable categórica con 4 categorías: invierno, verano, primavera y +otoño. Obtenga la información referente a "invierno" solamente. + ```{r filter, exercise = TRUE} estaciones %>% ``` @@ -90,7 +93,9 @@ grade_result( En el conjunto de datos hay varios años por temporada. Obtenga la temperatura promedio de todos los años para cada una de las estaciones. -Llame a esa nueva variable "temp_promedio". Utilice las funciones `group_by()` y `summarise()`. +Llame a esa nueva variable "temp_promedio". Utilice las funciones `group_by()` +y `summarise()`. + ```{r mutate, exercise=TRUE} estaciones %>% @@ -118,7 +123,8 @@ grade_result( ### Ordene de forma descendiente las temporadas según la temperatura Ordene las observaciones en *estaciones* de manera que las temporadas estén -ordenadas según la temperatura reportada de mayor a menor, es decir, en forma descendiente. +ordenadas según la temperatura reportada de mayor a menor, es decir, en forma +descendiente. ```{r arrange, exercise = TRUE} estaciones %>% @@ -143,4 +149,3 @@ grade_result( "¡Bien hecho!") ) ``` - From ba9f803b0e5644c07450b167d43c234bcb9ff93a Mon Sep 17 00:00:00 2001 From: andreavargasmontero Date: Sun, 31 Oct 2021 15:45:35 -0600 Subject: [PATCH 11/29] code style pizarra_tiempos --- .../pizarra_tiempos_fechas.Rmd | 69 ++++++++++++------- 1 file changed, 45 insertions(+), 24 deletions(-) diff --git a/inst/tutorials/pizarra_tiempos_fechas/pizarra_tiempos_fechas.Rmd b/inst/tutorials/pizarra_tiempos_fechas/pizarra_tiempos_fechas.Rmd index d069490..c5d0371 100644 --- a/inst/tutorials/pizarra_tiempos_fechas/pizarra_tiempos_fechas.Rmd +++ b/inst/tutorials/pizarra_tiempos_fechas/pizarra_tiempos_fechas.Rmd @@ -29,26 +29,31 @@ library(ggplot2) library(dplyr) library(gradethis) tutorial_options(exercise.checker = gradethis::grade_learnr) + marriage <- mosaicData::Marriage -marriage2 <- marriage %>% - mutate(appdate2 = mdy(appdate), - ceremonydate2 = mdy(ceremonydate), - dob2 = format(as.Date(marriage$dob, "%m/%d/%y"), "19%y-%m-%d") +matrimonios <- marriage %>% + mutate(appdate = mdy(appdate), + ceremonydate = mdy(ceremonydate), + dob = format(as.Date(dob, "%m/%d/%y"), "19%y-%m-%d") ) -marriage_duracion <- marriage2 %>% - mutate(duracion = today() - ceremonydate2) +marriage_duracion <- matrimonios %>% + mutate(duracion = today() - ceremonydate) ``` ```{r, echo=FALSE, out.width="35%", fig.align = "center"} -knitr::include_graphics("https://storage.googleapis.com/datos_cursos/ixpantia_introR/ixpantia_logo.png") +knitr::include_graphics( + "https://storage.googleapis.com/datos_cursos/ixpantia_introR/ixpantia_logo.png" + ) ``` ## Datos: **marriage** -Este set de datos contiene información sobre matrimonios registrados en Alabama, Estados Unidos enntre 1996 y 1999. +Este set de datos contiene información sobre matrimonios registrados en Alabama, +Estados Unidos entre 1996 y 1999. + ```{r} glimpse(marriage) ``` @@ -71,7 +76,6 @@ glimpse(marriage) | `dayOfBirth` | Día de nacimiento | | `sign` | Signo astrológico de quien inscribe | - ### Columnas de fechas ```{r echo=TRUE} @@ -84,11 +88,15 @@ class(marriage$dob) ### Convierta las tres columnas en el formato fecha que les corresponde -Anteriormente vimos que en el set de datos **marriage** hay tres variables que representan fechas pero no están correctamente categorizadas. Utilice las funciones vistas anteriormente para convertirlas en el formato que les pertenece. +Anteriormente vimos que en el set de datos **marriage** hay tres variables que +representan fechas pero no están correctamente categorizadas. Utilice las +funciones vistas anteriormente para convertirlas en el formato que les +pertenece. + ```{r convertir, exercise = TRUE} -appdate2 <- -ceremonydate2 <- -dob2 <- +appdate <- +ceremonydate <- +dob <- ``` ```{r convertir-hint-1} @@ -96,9 +104,9 @@ dob2 <- ``` ```{r convertir-solution} -appdate2 <- mdy(marriage$appdate) -ceremonydate2 <- mdy(marriage$ceremonydate) -dob2 <- format(as.Date(marriage$dob, "%m/%d/%y"), "19%y-%m-%d") +appdate <- mdy(marriage$appdate) +ceremonydate <- mdy(marriage$ceremonydate) +dob <- format(as.Date(marriage$dob, "%m/%d/%y"), "19%y-%m-%d") ``` ```{r convertir-check} @@ -106,10 +114,13 @@ grade_code("¡Muy bien!") ``` ### Cree una nueva columna que represente el tiempo que ha pasado desde la ceremonia +En el ejercicio anterior pasamos las columnas que se referían a fechas en el +formato correcto, esto quedó guardado en un nuevo set de datos llamado +**matrimonios**. Ahora cree una nueva variable que represente el tiempo que ha +pasado desde la ceremonia (`ceremonydate`) y llamela `duracion` -En el ejercicio anterior pasamos las columnas que se referían a fechas en el formato correcto, esto quedó guardado en un nuevo set de datos llamado **marriage2**. Ahora cree una nueva variable que represente el tiempo que ha pasado desde la ceremonia (`ceremonydate2`) y llamela `duracion` ```{r today, exercise = TRUE} -marriage2 %>% +matrimonios %>% mutate() ``` @@ -120,7 +131,7 @@ marriage2 %>% ```{r today-check} grade_result( pass_if(~ identical(unlist(.result), - unlist(marriage2 %>% + unlist(matrimonios %>% mutate(duracion = today() - ceremonydate))), "¡Excelente!") ) @@ -128,7 +139,12 @@ grade_result( ### Represente gráficamente la distribucion de la nueva variable `duracion` -En el ejercicio anterior creamos una nueva variable llamada `duracion` que representa el tiempo que ha pasado desde el matrimonio al dia de hoy. Esto quedó guardado en un nuevo set de datos llamado **marriage_duracion**. Ahora utilice `ggplot2` para representar con un gráfico la distribucion de esta variable. Debe utilizar `as.numeric(duracion)` para evitar problemas con la interfaz. +En el ejercicio anterior creamos una nueva variable llamada `duracion` que +representa el tiempo que ha pasado desde el matrimonio al dia de hoy. Esto +quedó guardado en un nuevo set de datos llamado **marriage_duracion**. Ahora +utilice `ggplot2` para representar con un gráfico la distribucion de esta +variable. Debe utilizar `as.numeric(duracion)` para evitar problemas con la +interfaz. ```{r graf1, exercise = TRUE} ggplot(marriage_duracion, aes()) + @@ -145,7 +161,9 @@ ggplot(marriage_duracion, aes()) + ```{r graf1-check} grade_result( - pass_if(~ identical(.result, ggplot(marriage_duracion, aes(as.numeric(duracion))) + + pass_if(~ identical(.result, + ggplot(marriage_duracion, + aes(as.numeric(duracion))) + geom_histogram(aes(fill = ..count..))), "¡Excelente!") ) @@ -153,7 +171,10 @@ grade_result( ### Represente gráficamente la distribucion de `duracion` según la persona que inscribió el matrimonio -En el ejercicio anterior obtuvimos un gráfico con la distribución de `duracion` en forma de histograma, ahora vuelva a hacerlo pero esta vez diferenciando según la persona que inscribió el matrimonio, representado por la columna `person`. Recuerde utilizar `as.numeric(duracion)`. +En el ejercicio anterior obtuvimos un gráfico con la distribución de `duracion` +en forma de histograma, ahora vuelva a hacerlo pero esta vez diferenciando +según la persona que inscribió el matrimonio, representado por la columna +`person`. Recuerde utilizar `as.numeric(duracion)`. ```{r graf2, exercise = TRUE} ggplot(marriage_duracion, aes()) + @@ -166,10 +187,10 @@ ggplot(marriage_duracion, aes()) + ```{r graf2-check} grade_result( - pass_if(~ identical(.result, ggplot(marriage_duracion, aes(as.numeric(duracion), + pass_if(~ identical(.result, + ggplot(marriage_duracion, aes(as.numeric(duracion), fill = person)) + geom_histogram()), "¡Excelente!") ) ``` - From 5b7832168b4e55bcef0f90150a732cda871f6b49 Mon Sep 17 00:00:00 2001 From: andreavargasmontero Date: Sun, 31 Oct 2021 15:47:41 -0600 Subject: [PATCH 12/29] syle review pizarra tidyr --- .../tutorials/pizarra_tidyr/pizarra_tidyr.Rmd | 40 ++++++++++++++----- 1 file changed, 29 insertions(+), 11 deletions(-) diff --git a/inst/tutorials/pizarra_tidyr/pizarra_tidyr.Rmd b/inst/tutorials/pizarra_tidyr/pizarra_tidyr.Rmd index ace1b83..06dc672 100644 --- a/inst/tutorials/pizarra_tidyr/pizarra_tidyr.Rmd +++ b/inst/tutorials/pizarra_tidyr/pizarra_tidyr.Rmd @@ -27,9 +27,13 @@ library(tidyr) library(gradethis) tutorial_options(exercise.checker = gradethis::grade_learnr) -gap_ancho <- readr::read_csv('https://raw.githubusercontent.com/OHI-Science/data-science-training/master/data/gapminder_wide.csv') +gap_ancho <- readr::read_csv( + 'https://raw.githubusercontent.com/OHI-Science/data-science-training/master/data/gapminder_wide.csv' + ) -gapminder <- readr::read_csv('https://raw.githubusercontent.com/OHI-Science/data-science-training/master/data/gapminder.csv') +gapminder <- readr::read_csv( + 'https://raw.githubusercontent.com/OHI-Science/data-science-training/master/data/gapminder.csv' + ) gap_largo <- gather(gap_ancho, key = obstype_year, @@ -43,14 +47,20 @@ knitr::include_graphics("https://storage.googleapis.com/datos_cursos/ixpantia_in ## Datos: **gap_ancho** -Este conjunto de datos contiene información sobre distintos países, como características demográficas y económicas. Se conforma de 38 variables y 142 observaciones. Como podrán ver, la base está un poco desordenada y parece tener mucho espacio para mejoras. +Este conjunto de datos contiene información sobre distintos países, como +características demográficas y económicas. Se conforma de 38 variables y 142 +observaciones. Como podrán ver, la base está un poco desordenada y parece tener +mucho espacio para mejoras. + ```{r} glimpse(gap_ancho) ``` Descripción de las variables: -Nota: algunas variables comparten la primera palabra de su nombre con otras, por lo que solo se describen estos inicios de nombres ya que son muchas variables y describir todas resultaría muy largo y repetitivo. +Nota: algunas variables comparten la primera palabra de su nombre con otras, +por lo que solo se describen estos inicios de nombres ya que son muchas +variables y describir todas resultaría muy largo y repetitivo. | Variable | Descripción | |:--------:|:-----------:| @@ -65,7 +75,11 @@ Nota: algunas variables comparten la primera palabra de su nombre con otras, por ### Ordene el conjunto de datos de utilizando `pivot_longer()` -El conjunto de datos *gap_ancho* no está ordenado, es más ancho de lo que debería. Utilizando la función `pivot_longer` convierta *gap_ancho* en un conjunto de datos con una nueva columna *obstype_year* con los nombres de las variables y *obs_values* con sus valores +El conjunto de datos *gap_ancho* no está ordenado, es más ancho de lo que +debería. Utilizando la función `pivot_longer` convierta *gap_ancho* en un +conjunto de datos con una nueva columna *obstype_year* con los nombres de +las variables y *obs_values* con sus valores + ```{r gather, exercise = TRUE} pivot_longer(gap_ancho, ) ``` @@ -78,7 +92,6 @@ names_to = "obstype_year" values_to = "obs_values" ``` - ```{r gather-check} grade_result( pass_if(~ identical(unlist(.result), @@ -89,10 +102,12 @@ grade_result( ) ``` - ### Vuelva al conjunto de datos original usando `pivot_wider` -Anteriormente acomodamos el conjunto de datos original utilizando `pivot_longer()`, este conjunto de datos quedó guardado como **gap_largo**. Ahora utilice `pivot_wider()` para volver al formato original de los datos. +Anteriormente acomodamos el conjunto de datos original utilizando +`pivot_longer()`, este conjunto de datos quedó guardado como **gap_largo**. +Ahora utilice `pivot_wider()` para volver al formato original de los datos. + ```{r spread, exercise = TRUE} pivot_wider(gap_largo, ) ``` @@ -101,7 +116,6 @@ pivot_wider(gap_largo, ) cols= gdpPercap_1952:pop_2007 ``` - ```{r spread-hint-2} "names_from = obstype_year" ``` @@ -118,10 +132,14 @@ grade_result( ) ``` - ### Separe la columna `obstype_type` en dos columnas: `obstype` y `year` -En el conjunto de datos de *gap_largo* hay una columna llamada `obstype_year` que contiene la característica demográfica o económica y el año de registro de la misma. Utilice la función `separate()` para separar esta columna en dos nuevas: `obstype` y `year`. Recuerde observar el símbolo que hay como patrón para separar cada uno de los valores +En el conjunto de datos de *gap_largo* hay una columna llamada `obstype_year` +que contiene la característica demográfica o económica y el año de registro de +la misma. Utilice la función `separate()` para separar esta columna en dos +nuevas: `obstype` y `year`. Recuerde observar el símbolo que hay como patrón +para separar cada uno de los valores + ```{r separate, exercise = TRUE} separate(data = gap_largo, ) ``` From 2ff30ab4a386764c1a63b88f80ea6210ea053507 Mon Sep 17 00:00:00 2001 From: andreavargasmontero Date: Sun, 31 Oct 2021 16:50:16 -0600 Subject: [PATCH 13/29] style review puzarra tidy data --- .../pizarra_tidy_data/pizarra_tidy_data.Rmd | 106 +++++++++++++----- 1 file changed, 78 insertions(+), 28 deletions(-) diff --git a/inst/tutorials/pizarra_tidy_data/pizarra_tidy_data.Rmd b/inst/tutorials/pizarra_tidy_data/pizarra_tidy_data.Rmd index bb88be3..e542548 100644 --- a/inst/tutorials/pizarra_tidy_data/pizarra_tidy_data.Rmd +++ b/inst/tutorials/pizarra_tidy_data/pizarra_tidy_data.Rmd @@ -32,24 +32,26 @@ tutorial_options(exercise.checker = gradethis::grade_learnr) temp = tempfile(fileext = ".xlsx") dataURL <- "https://storage.googleapis.com/datos_cursos/Planilla%20presidencia.xlsx" -download.file(dataURL, destfile=temp, mode='wb') +download.file(dataURL, destfile = temp, mode = 'wb') planilla <- readxl::read_excel(temp) - planilla2 <- planilla %>% mutate(fecha = dmy_hms(planilla$FechaPago)) %>% select(Nombre, Cedula, Institucion, Rubro, Monto, fecha) -separados <- pivot_wider(data = planilla, names_from = Rubro, values_from = Monto) - +separados <- pivot_wider(data = planilla, + names_from = Rubro, + values_from = Monto) temp2 = tempfile(fileext = ".xlsx") dataURL2 <- "https://storage.googleapis.com/datos_cursos/planillaNAs.xlsx" download.file(dataURL2, destfile=temp2, mode='wb') planillaNAs <- readxl::read_excel(temp2) - -fecha_separada <- separate(data = planilla2, col = fecha,into = c("anio", "mes", "dia"), sep = "-") +fecha_separada <- separate(data = planilla2, col = fecha,into = c("anio", + "mes", + "dia"), + sep = "-") ``` ```{r, echo=FALSE, out.width="35%", fig.align = "center"} @@ -60,12 +62,15 @@ knitr::include_graphics("https://storage.googleapis.com/datos_cursos/ixpantia_in ### Datos: **planilla** -Este set de datos incluye información sobre los trabajadores de Presidencia Costa Rica en el segundo cuatrimestre del 2019. Contiene 6 variables o columnas y 230 observaciones. +Este set de datos incluye información sobre los trabajadores de Presidencia +Costa Rica en el segundo cuatrimestre del 2019. Contiene 6 variables o columnas +y 230 observaciones. + ```{r exercise.eval = FALSE} glimpse(planilla) ``` -Descripcion de las variables +Descripción de las variables | Variable | Descripcion | |:--------:|:-----------:| @@ -80,7 +85,10 @@ Descripcion de las variables ### Función dispersar ### 1. Cree un nuevo set de datos "disperso" utilizando la columna `Nombre` -El set de datos incluye varias observaciones para el mismo trabajador ya que el pago de cada trabajador se puede dividir en varios rubros. Utilice pivot_wider de tal forma que cree una columna para cada rubro o tipo de pago. +El set de datos incluye varias observaciones para el mismo trabajador ya que el +pago de cada trabajador se puede dividir en varios rubros. Utilice `pivot_wider` +de tal forma que cree una columna para cada rubro o tipo de pago. + ```{r wider2, exercise=TRUE, exercise.eval = FALSE} pivot_wider() ``` @@ -95,17 +103,25 @@ grade_result( ) ``` - ### Función reorganizar ### 2. Partiendo del set de datos disperso creado anteriormente vuelva al set de datos original -En el paso anterior creamos una base de datos donde se creo una columna para cada rubro de pago, este set de datos se llama **separados**. Ahora utilice pivot_longer() para volver al set de datos original. En la pista puede encontrar los nombres de las columnas escritos para facilitarle la escritura del código. +En el paso anterior creamos una base de datos donde se creo una columna para +cada rubro de pago, este set de datos se llama **separados**. Ahora utilice +`pivot_longer()` para volver al set de datos original. En la pista puede +encontrar los nombres de las columnas escritos para facilitarle la escritura +del código. + ```{r longer1, exercise=TRUE, exercise.eval = FALSE} pivot_longer(data = separados, ) ``` ```{r longer1-hint-1} -cols = c("CARRERA PROFESIONAL", "DISCRECIONALIDAD Y CONFIDENCIALIDAD COL 108", "DEDICACION EXCLUSIVA", "SALARIO BASE", "AUMENTOS ANUALES", "HORAS EXTRA-P.Adeudados", "PROHIBICION", "SOBREPAGO POR ASIGNACION", "SUBSIDIO ENFERMEDAD REG SERV CIVIL", "SUBSIDIO ENFERMEDAD NO REG SERV CIVIL") +cols = c("CARRERA PROFESIONAL", "DISCRECIONALIDAD Y CONFIDENCIALIDAD COL 108", + "DEDICACION EXCLUSIVA", "SALARIO BASE", "AUMENTOS ANUALES", + "HORAS EXTRA-P.Adeudados", "PROHIBICION", "SOBREPAGO POR ASIGNACION", + "SUBSIDIO ENFERMEDAD REG SERV CIVIL", + "SUBSIDIO ENFERMEDAD NO REG SERV CIVIL") ``` ```{r longer1-hint-2} @@ -114,24 +130,39 @@ cols = c("CARRERA PROFESIONAL", "DISCRECIONALIDAD Y CONFIDENCIALIDAD COL 108", " ```{r longer1-check} grade_result( - pass_if(~ identical(unlist(unname(.result)), unlist(unname(pivot_longer(data = separados, cols = c("CARRERA PROFESIONAL", "DISCRECIONALIDAD Y CONFIDENCIALIDAD COL 108", "DEDICACION EXCLUSIVA", "SALARIO BASE", "AUMENTOS ANUALES", "HORAS EXTRA-P.Adeudados", "PROHIBICION", "SOBREPAGO POR ASIGNACION", "SUBSIDIO ENFERMEDAD REG SERV CIVIL", "SUBSIDIO ENFERMEDAD NO REG SERV CIVIL"),names_to = "Rubro", values_to = "Monto")))), "Muy bien!") + pass_if(~ identical(unlist(unname(.result)), + unlist(unname( + pivot_longer( + data = separados, + cols = c("CARRERA PROFESIONAL", + "DISCRECIONALIDAD Y CONFIDENCIALIDAD COL 108", + "DEDICACION EXCLUSIVA", "SALARIO BASE", + "AUMENTOS ANUALES", "HORAS EXTRA-P.Adeudados", + "PROHIBICION", "SOBREPAGO POR ASIGNACION", + "SUBSIDIO ENFERMEDAD REG SERV CIVIL", + "SUBSIDIO ENFERMEDAD NO REG SERV CIVIL"), + names_to = "Rubro", values_to = "Monto")))), + "Muy bien!") ) ``` - ## Manejo de NA´s ### Datos: **planillaNAs2** -Este set de datos es similar al visto anteriormente, solo que le faltan algunos datos, por lo que tiene NAs en distintas columnas. +Este set de datos es similar al visto anteriormente, solo que le faltan algunos +datos, por lo que tiene NAs en distintas columnas. + ```{r} glimpse(planillaNAs) ``` - ### 3. Complete los NAs de Monto y de Cedula -El set de datos *planillaNAs* tiene valores faltantes (NAs) en varias columnas, en este ejercicio debes reeplazar los valores faltantes de las variable `Monto` y `Cedula` +El set de datos *planillaNAs* tiene valores faltantes (NAs) en varias columnas, +en este ejercicio debes reeplazar los valores faltantes de las variable `Monto` +y `Cedula` + ```{r fill2, exercise=TRUE} fill() ``` @@ -142,14 +173,17 @@ fill() ```{r fill2-check} grade_result( - pass_if(~ identical(unlist(.result), unlist(fill(planillaNAs, Monto, Cedula))), "Muy bien!") + pass_if(~ identical(unlist(.result), + unlist(fill(planillaNAs, Monto, Cedula))), + "Muy bien!") ) ``` - ### 4. Reemplace los NAs con 99 -Los valores faltantes del set de datos están identificados con un "NA", pero esto puede complicar las cosas en algunos procesos. Cambie los "NAs" por 99. +Los valores faltantes del set de datos están identificados con un "NA", pero +esto puede complicar las cosas en algunos procesos. Cambie los "NAs" por 99. + ```{r NA99, exercise=TRUE} replace_na() ``` @@ -160,7 +194,10 @@ replace_na() ```{r NA99-check} grade_result( - pass_if(~ identical(unlist(.result), unlist(replace_na(planillaNAs, list(valor = 99)))), "Muy bien!") + pass_if(~ identical(unlist(.result), + unlist(replace_na(planillaNAs, + list(valor = 99)))), + "Muy bien!") ) ``` @@ -168,16 +205,19 @@ grade_result( ### Datos: **planilla2** -Este set de datos es similar a *planilla2* con la excepcion que en lugar de la columna `FechaPago` tiene l columna `fecha` que solo contiene la fecha del pago, no la hora. +Este set de datos es similar a *planilla2* con la excepcion que en lugar de la +columna `FechaPago` tiene l columna `fecha` que solo contiene la fecha del +pago, no la hora. ```{r} glimpse(planilla2) ``` - ### 5. Separe la fecha en año, mes y dia -El set de datos contiene una columna llamada `fecha`, la cual representa la fecha completa al momento del pago. Ahora utilice la funcion `separate()` para separar esta variable en tres columnas distintas, año, mes y dia. +El set de datos contiene una columna llamada `fecha`, la cual representa la +fecha completa al momento del pago. Ahora utilice la funcion `separate()` para +separar esta variable en tres columnas distintas, año, mes y dia. ```{r separate, exercise=TRUE} separate(data = planilla2, ) @@ -189,13 +229,20 @@ sep = "-" ```{r separate-check} grade_result( - pass_if(~ identical(unlist(.result), unlist(separate(data = planilla2, col = fecha, into = c("anio", "mes", "dia"), sep = "-"))), "Muy bien!") + pass_if(~ identical(unlist(.result), + unlist(separate(data = planilla2, + col = fecha, + into = c("anio", "mes", "dia"), + sep = "-"))), + "Muy bien!") ) ``` ### 6. Una la fecha que separamos en una sola columna -Anteriormente separamos la fecha en año, mes y dia. Este set de datos quedó guardado como **fecha_separada**. Ahora utilice la función `unite()` para unir la fecha en una sola columna, como estaba anteriormente. +Anteriormente separamos la fecha en año, mes y dia. Este set de datos quedó +guardado como **fecha_separada**. Ahora utilice la función `unite()` para unir +la fecha en una sola columna, como estaba anteriormente. ```{r unite, exercise=TRUE} unite(data = fecha_separada, ) @@ -207,7 +254,10 @@ sep = "/" ```{r} grade_result( - pass_if(~ identical(unlist(.result), unlist(unite(data = fecha_separada , col = "FechaPago", anio:dia, sep = "/"))), "Muy bien!") + pass_if(~ identical(unlist(.result), + unlist(unite(data = fecha_separada , + col = "FechaPago", + anio:dia, sep = "/"))), + "Muy bien!") ) ``` - From 19bc226889b859241993abde3e93cf1afff7c74f Mon Sep 17 00:00:00 2001 From: andreavargasmontero Date: Sun, 31 Oct 2021 17:04:23 -0600 Subject: [PATCH 14/29] Borra tutorial de programar dplyr --- .../pizarra_programar_dplyr.Rmd | 134 ------------------ 1 file changed, 134 deletions(-) delete mode 100644 inst/tutorials/pizarra_programar_dplyr/pizarra_programar_dplyr.Rmd diff --git a/inst/tutorials/pizarra_programar_dplyr/pizarra_programar_dplyr.Rmd b/inst/tutorials/pizarra_programar_dplyr/pizarra_programar_dplyr.Rmd deleted file mode 100644 index 114792a..0000000 --- a/inst/tutorials/pizarra_programar_dplyr/pizarra_programar_dplyr.Rmd +++ /dev/null @@ -1,134 +0,0 @@ ---- -title: "Sesión 6: Programar con dplyr" -subtitle: "Ejercicios pizarra" -output: - learnr::tutorial: - language: es - css: https://storage.googleapis.com/datos_cursos/ixpantia_introR/intro_r.css -runtime: shiny_prerendered -description: > - Ejercicios de pizarra que se realizan durante la sesión para aprender sobre - programar con dplyr. ---- - - - -```{r setup, include=FALSE} -knitr::opts_chunk$set(echo = FALSE) - -library(learnr) -library(dplyr) -library(purrr) -library(rlang) -library(readr) -library(janitor) -library(lubridate) -library(readxl) -url <- "https://storage.googleapis.com/datos_cursos/PJCROD_INDICESALARIAL_V1.xls" - -temp = tempfile(fileext = ".xls") -download.file(url, destfile = temp, mode = 'wb') -indice_salarial <- read_excel(temp) %>% - mutate(salario_antes = as.numeric(Salario_Base_Ant), - salario_actual = as.numeric(Salario_Base_Act), - indice = as.numeric(I_C_S)) %>% - clean_names() -``` - -```{r, echo=FALSE, out.width="35%", fig.align = "center"} -knitr::include_graphics("https://storage.googleapis.com/datos_cursos/ixpantia_introR/ixpantia_logo.png") -``` - -## Datos de la sesión - -### Indice Salarial del Poder Judicial -```{r} -glimpse(indice_salarial) -``` - -## Preguntas - -### Pregunta 1 -```{r exp, exercise = TRUE, error = TRUE} -mi_exp_mal <- (indice_salarial$salario_antes * indice_salarial$salario_actual) / indice_salarial$indice -mi_exp <- quote((indice_salarial$salario_antes * indice_salarial$salario_actual) / indice_salarial$indice) - -qq_show( - indice_salarial %>% - mutate(mi_exp) -) - -qq_show( - indice_salarial %>% - mutate(!!mi_exp) -) -``` - -Para crear funciones con gramática tidyverse: -```{r gramatica, exercise = TRUE} -indice_salarial %>% - group_by(tn_cod_clase) %>% - summarise( - avg = mean(salario_actual, na.rm = TRUE) - ) -``` - -### Pregunta 2 -```{r promedio, exercise = TRUE} -calcula_promedio <- function(data, columna) { - data %>% - group_by(tn_cod_clase) %>% - summarise(avg = mean(.data[[columna]], na.rm = TRUE)) -} - -calcula_promedio(data = indice_salarial, columna = "salario_actual") - -qq_show(calcula_promedio(data = indice_salarial, columna = "salario_actual")) -``` - -### Pregunta 3 -```{r promedio2, exercise = TRUE} -calcula_promedio <- function(data, columna, grupo) { - data %>% - group_by({{grupo}}) %>% - summarise(avg = mean(.data[[columna]], na.rm = TRUE)) -} - -calcula_promedio(data = indice_salarial, columna = "salario_actual", grupo = r_e_f_j ) -``` - -### Pregunta 4 -```{r clase, exercise = TRUE} -promedio_por_clase <- function(datos_abiertos, clase) { - - indice_salarial %>% - filter(tc_des_clase == {{clase}}) %>% - summarise( - promedio = mean(salario_actual, na.rm = TRUE) - ) -} - -promedio_por_clase(datos_abiertos = indice_salarial, - clase = "AUXILIAR ADMINISTRATIVO") -``` - -### Pregunta 5 -```{r agrupacion, exercise = TRUE} -agrupacion_total <- function(datos_abiertos, ...) { - - agrupacion <- enquos(...) - - datos_abiertos %>% - group_by(!!!agrupacion) %>% - summarise( - total = n() - ) -} - -agrupacion_total(datos_abiertos = indice_salarial, - ... = r_e_f_j , tn_cod_clase) -``` From 7f0ede0b898bfa0f0251b57ccdd88303a3a66c4d Mon Sep 17 00:00:00 2001 From: andreavargasmontero Date: Sun, 31 Oct 2021 17:12:07 -0600 Subject: [PATCH 15/29] review de pizarra ggplot intro --- .../pizarra_ggplot_introduccion.Rmd | 53 ++++++++++++------- 1 file changed, 33 insertions(+), 20 deletions(-) diff --git a/inst/tutorials/pizarra_ggplot_introduccion/pizarra_ggplot_introduccion.Rmd b/inst/tutorials/pizarra_ggplot_introduccion/pizarra_ggplot_introduccion.Rmd index 13b25b7..19d09b0 100644 --- a/inst/tutorials/pizarra_ggplot_introduccion/pizarra_ggplot_introduccion.Rmd +++ b/inst/tutorials/pizarra_ggplot_introduccion/pizarra_ggplot_introduccion.Rmd @@ -26,28 +26,35 @@ library(readxl) library(readr) library(janitor) library(lubridate) +library(tidyr) +library(janitor) temp = tempfile(fileext = ".xlsx") dataURL <- "https://storage.googleapis.com/datos_cursos/SICOP_2.xlsx" -download.file(dataURL, destfile=temp, mode='wb') +download.file(dataURL, destfile = temp, mode = 'wb') SICOP_2 <- readxl::read_excel(temp) -SICOP <- SICOP_2[1:1000,] %>% +SICOP <- SICOP_2 %>% + slice_head(n = 1000) %>% mutate(Fecha_Hora = dmy_hms(Fecha_notificacion)) %>% - tidyr::separate(Fecha_Hora, c("fecha", "hora"), sep = " ") %>% + separate(Fecha_Hora, c("fecha", "hora"), sep = " ") %>% mutate(fecha = as.Date(fecha)) %>% mutate(mes_dia = format(fecha, '%m-%d')) %>% - janitor::clean_names() - + clean_names() ``` ```{r, echo=FALSE, out.width="35%", fig.align = "center"} -knitr::include_graphics("https://storage.googleapis.com/datos_cursos/ixpantia_introR/ixpantia_logo.png") +knitr::include_graphics( + "https://storage.googleapis.com/datos_cursos/ixpantia_introR/ixpantia_logo.png" + ) ``` ## Datos: **SICOP** -El conjunto de datos que se usaran en la sesión se llama **SICOP** y contiene información de compras públicas en Costa Rica en el 2019. Tiene 1000 observaciones y 21 variables. +El conjunto de datos que se usaran en la sesión se llama **SICOP** y contiene +información de compras públicas en Costa Rica en el 2019. Tiene 1000 +observaciones y 21 variables. + ```{r} glimpse(SICOP) ``` @@ -78,12 +85,15 @@ Descripción de las columnas: | `hora` | Hora a la que se realiza la compra | | `mes_dia` | Mes y día donde se realiza la compra | - ## Ejercicios ### 1. ¿Cuál es la diferencia entre `geom_point()` y `geom_jitter()`? -Dos de los `geom` que hemos visto son `geom_point()` y `geom_jitter()`, ambos parecen hacer gráficos de puntos, sin embargo, hay algo que los hace completamente diferentes. Viendo el siguiente gráfico, cuál diría que es esta diferencia? +Dos de los `geom` que hemos visto son `geom_point()` y `geom_jitter()`, ambos +parecen hacer gráficos de puntos, sin embargo, hay algo que los hace +completamente diferentes. Viendo el siguiente gráfico, cuál diría que es +esta diferencia? + ```{r check, exercise = TRUE} check <- ggplot(data = SICOP, aes(x = tipo_procedimiento, y = fecha)) + @@ -97,7 +107,8 @@ check + geom_jitter() ```{r check2, echo=FALSE} question("¿Cuál es la diferencia entre `geom_point()` y `geom_jitter()`?", answer("geom_jitter hace columnas no puntos"), - answer("geom_jitter agrega un poco de variacion aleatoria entre los puntos para evitar la sobreposicion", correct = TRUE), + answer("geom_jitter agrega un poco de variacion aleatoria entre los puntos para evitar la sobreposicion", + correct = TRUE), answer("geom_point es más ordenado ya que hace un espaciamiento uniforme entre los puntos"), answer("geom_point se ve mejor"), incorrect = "Incorrecto.") @@ -105,7 +116,8 @@ question("¿Cuál es la diferencia entre `geom_point()` y `geom_jitter()`?", ### 2. ¿Cómo podemos hacer para que el abline nos aparezca con los puntos? -Haga un gráfico de puntos donde en el eje x esté la variable `mes_dia` y en el eje y: `monto` y luego agréguele un abline en "2e+08" +Haga un gráfico de puntos donde en el eje x esté la variable `mes_dia` y en el +eje y: `monto` y luego agréguele un abline en "2e+08" ```{r abline, exercise = TRUE} ggplot(data = SICOP) @@ -117,32 +129,33 @@ ggplot(data = SICOP, aes(x = mes_dia, y = monto)) + geom_abline(intercept = 2e+08) ``` - ### 3. Cambie el argumento position por fill y por stack en el gráfico de barras -Hemos trabajado con `geom_bar()` anteriormente para hacer gráficos de barras. Ahora haga un gráfico de barras con `clasificacion_objeto` en el eje x y `tipo_modalidad` en el `fill` y en `position` primero utilice "fill" y luego haga otro con position = "stack" para ver la diferencia entre ambos. +Hemos trabajado con `geom_bar()` anteriormente para hacer gráficos de barras. +Ahora haga un gráfico de barras con `clasificacion_objeto` en el eje `x` y +`tipo_modalidad` en el `fill` y en `position` primero utilice "fill" y luego +haga otro con `position = "stack"` para ver la diferencia entre ambos. #### fill + ```{r fill, exercise = TRUE} ggplot(SICOP) ``` ```{r fill-solution} -ggplot(SICOP,aes(x = clasificacion_objeto, fill = tipo_modalidad)) + - geom_bar(position = "fill") +ggplot(SICOP, aes(x = clasificacion_objeto, fill = tipo_modalidad)) + + geom_bar(position = "fill") ``` - #### stack + ```{r stack, exercise = TRUE} ggplot(SICOP) ``` ```{r stack-solution} -ggplot(SICOP,aes(x = clasificacion_objeto, fill = tipo_modalidad)) + - geom_bar(position = "stack") +ggplot(SICOP, aes(x = clasificacion_objeto, fill = tipo_modalidad)) + + geom_bar(position = "stack") ``` - - From daac5c4dd2d94165fb424b270d88babf50b02df7 Mon Sep 17 00:00:00 2001 From: andreavargasmontero Date: Sun, 31 Oct 2021 17:16:53 -0600 Subject: [PATCH 16/29] reviews de pizarra ggplot avanzado --- .../pizarra_ggplot_avanzado.Rmd | 45 +++++++++---------- 1 file changed, 22 insertions(+), 23 deletions(-) diff --git a/inst/tutorials/pizarra_ggplot_avanzado/pizarra_ggplot_avanzado.Rmd b/inst/tutorials/pizarra_ggplot_avanzado/pizarra_ggplot_avanzado.Rmd index bb514e9..6e00255 100644 --- a/inst/tutorials/pizarra_ggplot_avanzado/pizarra_ggplot_avanzado.Rmd +++ b/inst/tutorials/pizarra_ggplot_avanzado/pizarra_ggplot_avanzado.Rmd @@ -30,13 +30,14 @@ library(janitor) library(lubridate) library(visdat) -data <- hflights %>% +vuelos <- hflights %>% clean_names() -data <- data %>% + +vuelos <- vuelos %>% unite(year, month, dayof_month, col = "fecha", sep = "-") %>% mutate(fecha = ymd(fecha)) -mayores_atrasos <- data %>% +mayores_atrasos <- vuelos %>% group_by(dest) %>% summarise( promedio = mean(arr_delay, na.rm = TRUE) @@ -46,13 +47,13 @@ mayores_atrasos <- data %>% select(dest) %>% pull() -destinos_atrasos <- data %>% +destinos_atrasos <- vuelos %>% filter(dest %in% mayores_atrasos) -sfo <- data %>% +sfo <- vuelos %>% filter(dest == "SFO") -vuelos_cancelados <- data %>% +vuelos_cancelados <- vuelos %>% group_by(unique_carrier) %>% summarise( total = sum(cancelled, na.rm = TRUE) @@ -62,7 +63,7 @@ vuelos_cancelados <- data %>% select(unique_carrier) %>% pull() -vuelos_cancelados <- data %>% +vuelos_cancelados <- vuelos %>% filter(unique_carrier %in% vuelos_cancelados) vuelos_por_aerolinea <- vuelos_cancelados %>% @@ -93,18 +94,18 @@ aerolineas_vuelos <- aerolineas_vuelos %>% knitr::include_graphics("https://storage.googleapis.com/datos_cursos/ixpantia_introR/ixpantia_logo.png") ``` -## Datos: **hfligths** -> **data** +## Datos: **hfligths** -> **vuelos_cancelados** -### `data` +### `vuelos` Los datos de la sesión provienen del set de datos **hflights**, el cual coniene los vuelos que salieron de los aeropuertos de Houston, Estados Unidos (IAH y -HOU) en el 2011. Usaremos **data** para los ejercicios ya que a este se le -hicieron unos pequeños cambios que facilitan el uso de los datos. **data** -tiene 19 variables y 227496 observaciones. +HOU) en el 2011. Usaremos **vuelos_cancelados** para los ejercicios ya que para +los ejercicios solo queremos analizar los vuelos cancelados. +**vuelos_cancelados** tiene 19 variables y 209,137 observaciones. ```{r} -glimpse(data) +glimpse(vuelos_cancelados) ``` Descripción de las variables: @@ -131,20 +132,17 @@ Descripción de las variables: | `cancellation_code` | Razón de cancelación: A = aerolínea, B = clima, C = sistema, D = seguridad | | `diverted` | Indicador de si el vuelo fue desviado o no | - ## Ejercicios - Queremos responder las preguntas: ### ¿Cómo es la distribución del número de vuelos cancelados por aerolínea? ¿Qué patrón se ve a través de los meses? Para responder esto, vamos a dividir el proceso en pasos: - #### 1. Saque cantidad de vuelos cancelados por aerolinea -Cree un nuevo set de datos que , partiendo de **vuelos_cancelados**, tenga una +Cree un nuevo set de datos que, partiendo de **vuelos_cancelados**, tenga una nueva variable llamada `mes` que represente el mes dentro de `fecha` y luego agrupe por aerolínea (`unique_carrier`) y por `mes`. Por último debe "contar" los vuelos que resultan usando `tally()`. @@ -176,8 +174,6 @@ vuelos_cancelados_mes <- vuelos_cancelados %>% mutate(mes = month(fecha)) ``` - - #### 3. Una los dos conjuntos de datos anteriores Anteriormente creamos dos sets de datos: **vuelos_por_aerolinea** y @@ -193,7 +189,6 @@ aerolineas_vuelos <- vuelos_cancelados_mes %>% left_join(vuelos_por_aerolinea, by = c("unique_carrier", "mes")) ``` - #### 4. Saque cantidad de cancelaciones por aerolinea Partiendo de **vuelos cancelados**, cree un nuevo conjunto de datos donde hayan @@ -231,7 +226,9 @@ aerolineas_vuelos <- aerolineas_vuelos %>% #### 6. A **aerolineas_vuelos** agreguele una columna con la proporción que representa cada total de cancelaciones -Hemos estado trabajando en el set de datos **aerolineas_vuelos** pero aun falta agregarle una columna que sea la proporción del total de cancelaciones para cada aerolínea. Llame a esta nueva variable `cancelaciones_proporcional`. +Hemos estado trabajando en el set de datos **aerolineas_vuelos** pero aun falta +agregarle una columna que sea la proporción del total de cancelaciones para cada +aerolínea. Llame a esta nueva variable `cancelaciones_proporcional`. ```{r av3, exercise = TRUE} aerolineas_vuelos <- aerolineas_vuelos %>% @@ -245,7 +242,10 @@ aerolineas_vuelos <- aerolineas_vuelos %>% #### 7. Grafique la proporción de cancelaciones para cada mes por aerolínea -Usando el set de datos **aerolineas_vuelos** cree un gráfico donde el eje y sea `cancelaciones_proporcional` y el eje x `mes` y que además permite diferenciar por aerolínea (`unique_carrier`). Puede hacer `as.factor(mes)` para que sea visualmente más placentero el gráfico. +Usando el set de datos **aerolineas_vuelos** cree un gráfico donde el eje y sea +`cancelaciones_proporcional` y el eje x `mes` y que además permite diferenciar +por aerolínea (`unique_carrier`). Puede hacer `as.factor(mes)` para que sea +visualmente más placentero el gráfico. ```{r graf, exercise = TRUE} ggplot(aerolineas_vuelos) @@ -259,4 +259,3 @@ ggplot(aerolineas_vuelos, aes( fill = unique_carrier)) + geom_bar(stat = "summary", fun.y = "mean", position = "dodge") ``` - From e2b94d4f6c26a0b8e078f9573f558580ed20b031 Mon Sep 17 00:00:00 2001 From: andreavargasmontero Date: Sun, 31 Oct 2021 17:24:34 -0600 Subject: [PATCH 17/29] review pizarra estructuras --- .../pizarra_estructuras_r.Rmd | 88 ++++++++++++------- 1 file changed, 54 insertions(+), 34 deletions(-) diff --git a/inst/tutorials/pizarra_estructuras_r/pizarra_estructuras_r.Rmd b/inst/tutorials/pizarra_estructuras_r/pizarra_estructuras_r.Rmd index b2d5724..79d012e 100644 --- a/inst/tutorials/pizarra_estructuras_r/pizarra_estructuras_r.Rmd +++ b/inst/tutorials/pizarra_estructuras_r/pizarra_estructuras_r.Rmd @@ -22,6 +22,7 @@ knitr::opts_chunk$set(echo = FALSE) library(learnr) library(dplyr) library(gradethis) +library(datasets) tutorial_options(exercise.checker = gradethis::grade_learnr) @@ -30,12 +31,14 @@ regiones <- data.frame(id = c(254, 369, 147, 852), valor = c(2500, 3700, 4200, 1200), tipo = c("A", "A", "C", "B")) -datasets::LifeCycleSavings -LifeCycleSavings$paises <- row.names(LifeCycleSavings) +ahorro_paises <- LifeCycleSavings %>% + mutate(pais = row.names(LifeCycleSavings)) ``` ```{r, echo=FALSE, out.width="35%", fig.align = "center"} -knitr::include_graphics("https://storage.googleapis.com/datos_cursos/ixpantia_introR/ixpantia_logo.png") +knitr::include_graphics( + "https://storage.googleapis.com/datos_cursos/ixpantia_introR/ixpantia_logo.png" + ) ``` ## Datos: **regiones** @@ -117,13 +120,17 @@ solamente. ```{r NORTE-check} grade_result( - pass_if(~ identical(unlist(.result), unlist(subset(regiones, region == "NORTE"))), "¡Muy bien!") + pass_if(~ identical(unlist(.result), + unlist(subset(regiones, region == "NORTE"))), + "¡Muy bien!") ) ``` ### 4. ¿Cómo obtener lo referente a aquellas regiones donde los montos son mayores 3000? -En el set de datos hay una columna llamada `valor`, donde se encuentra el monto recolectado en cada región. Ahora obtenga la información referente a las regiones que tienen montos recolectados mayores de 3000. +En el set de datos hay una columna llamada `valor`, donde se encuentra el monto +recolectado en cada región. Ahora obtenga la información referente a las +regiones que tienen montos recolectados mayores de 3000. ```{r 3000, exercise=TRUE, exercise.eval = FALSE} @@ -133,10 +140,11 @@ En el set de datos hay una columna llamada `valor`, donde se encuentra el monto "subset()" ``` - ```{r 3000-check} grade_result( - pass_if(~ identical(unlist(.result), unlist(subset(regiones, valor > 3000))), "Excelente!") + pass_if(~ identical(unlist(.result), + unlist(subset(regiones, valor > 3000))), + "Excelente!") ) ``` @@ -156,11 +164,13 @@ regiones ```{r difB-check} grade_result( - pass_if(~ identical(unlist(.result), unlist(subset(regiones, tipo != "B"))), "¡Buenísimo!") + pass_if(~ identical(unlist(.result), + unlist(subset(regiones, tipo != "B"))), + "¡Buenísimo!") ) ``` -## Datos: **LifeCycleSavings** +## Datos: **ahorro_paises** Este conjunto de datos contiene información sobre el ciclo de vida de los ahorros de 50 paises. Está inspirado en la hipótesis de Franco Modigliani sobre @@ -170,7 +180,7 @@ porcentaje de población con menos de 15 años y el porcentaje de población con más de 75 años. Los datos fueron recolectados en la década 1960-1970. ```{r} -glimpse(LifeCycleSavings) +glimpse(ahorro_paises) ``` Descripción de las variables: @@ -183,13 +193,15 @@ Descripción de las variables: | `dpi` | ingreso disponible per cápita | | `ddpi` | % de cambio del ingreso disponible per cápita | -## Ejercicios: **LifeCycleSavings** +## Ejercicios: **ahorro_paises** ### 1. Obtener media de variable dpi -En el set de datos hay una variable llamada `dpi`, obtenga la media o el promedio de esta. +En el set de datos hay una variable llamada `dpi`, obtenga la media o el +promedio de esta. + ```{r med_dpi, exercise = TRUE, exercise.eval = FALSE} -LifeCycleSavings$dpi +ahorro_paises$dpi ``` ```{r med_dpi-hint-1} @@ -198,7 +210,9 @@ LifeCycleSavings$dpi ```{r med_dpi-check} grade_result( - pass_if(~ identical(unlist(.result), unlist(mean(LifeCycleSavings$dpi))), "¡Genial!") + pass_if(~ identical(unlist(.result), + unlist(mean(ahorro_paises$dpi))), + "¡Genial!") ) ``` @@ -209,7 +223,7 @@ población que es menor de 15 años, descubra cuál país tiene un mayor porcent de esta población. ```{r pob15, exercise=TRUE, exercise.eval = FALSE} -LifeCycleSavings$pop15 +ahorro_paises$pop15 ``` ```{r pob15-hint-1} @@ -218,7 +232,7 @@ LifeCycleSavings$pop15 ```{r pob15-check} grade_result( - pass_if(~ identical(unlist(.result), unlist(max(LifeCycleSavings$pop15))), "¡Buenísimo!") + pass_if(~ identical(unlist(.result), unlist(max(ahorro_paises$pop15))), "¡Buenísimo!") ) ``` @@ -238,18 +252,20 @@ población. ```{r pob15_2-check} grade_result( - pass_if(~ identical(unlist(.result), unlist(min(LifeCycleSavings$pop75))), "¡Muy bien!") + pass_if(~ identical(unlist(.result), + unlist(min(ahorro_paises$pop75))), + "¡Muy bien!") ) ``` ### 4. Cambiar nombre dpi a disposable_income -En el set de datos hay una variable que se llama dpi, que representa el ingreso -disponible per cápita, ahora cambie el nombre de esta variable a +En el set de datos hay una variable que se llama `dpi`, que representa el +ingreso disponible per cápita, ahora cambie el nombre de esta variable a `diposable_income` ```{r col_names, exercise=TRUE, exercise.eval = FALSE} -LifeCycleSavings$dpi +ahorro_paises$dpi ``` ```{r col_names-hint-1} @@ -258,7 +274,10 @@ LifeCycleSavings$dpi ```{r col_names-check} grade_result( - pass_if(~ identical(unlist(.result), unlist(colnames(LifeCycleSavings)[4] <- "disposable_income")), "Bien hecho!") + pass_if(~ identical(unlist(.result), + unlist( + colnames(ahorro_paises)[4] <- "disposable_income")), + "Bien hecho!") ) ``` @@ -273,12 +292,12 @@ filtrar la base, ¿porqué no se recomienda hacerlo? question("¿Por qué no es recomendable hacer subsets por posición?", answer("Porque se ve feo"), answer("Porque no va con el estilo de código recomendado"), - answer("Porque los datos pueden cambiar en el futuro y la posición de lo que buscabamos puede cambiar", correct = TRUE), + answer("Porque los datos pueden cambiar en el futuro y la posición de lo que buscabamos puede cambiar", + correct = TRUE), answer("Opcion al escribirlo me puedo equivocar y poner la posición que no es"), incorrect = "Incorrecto.") ``` - ### 6. Generar nueva columna que contenga la suma de pop15 y pop75 En el set de datos hay una variable llamada `pop15`, el porcentaje de población @@ -291,16 +310,15 @@ porcentajes. Llame a esta nueva columna "suma". ``` ```{r suma-hint-1} -"LifeCycleSavings$suma" +"ahorro_paises$suma" ``` ```{r suma-check} grade_result( - pass_if(~ identical(unlist(.result), unlist(LifeCycleSavings$suma <- LifeCycleSavings$pop15 + LifeCycleSavings$pop75)), "Bien hecho!") + pass_if(~ identical(unlist(.result), unlist(ahorro_paises$suma <- ahorro_paises$pop15 + ahorro_paises$pop75)), "Bien hecho!") ) ``` - ### 7. Subset con países que tengan porcentajes de población menores a 15 años menor 23% y mayor a 47% El set de datos incluye información de 50 países, cada uno con un porcentaje de @@ -318,11 +336,10 @@ subset ```{r porc-check} grade_result( - pass_if(~ identical(unlist(.result), unlist(subset(LifeCycleSavings, LifeCycleSavings$pop15 < 23 | LifeCycleSavings$pop75 > 47))), "Bien hecho!") + pass_if(~ identical(unlist(.result), unlist(subset(ahorro_paises, ahorro_paises$pop15 < 23 | ahorro_paises$pop75 > 47))), "Bien hecho!") ) ``` - ### 8. Obtener un subset de los 6 países con mayor porcentaje de población mayor a 75 El set de datos contiene información de 50 países, cada uno con un porcentaje @@ -339,13 +356,16 @@ contenga los 6 países con mayor porcentaje de población mayor a 75 años. ```{r 6pai-check} grade_result( - pass_if(~ identical(unlist(.result), unlist(top_n(LifeCycleSavings, 6 , pop75) %>% - arrange(desc(pop75)))),"Bien hecho!"), + pass_if(~ identical(unlist(.result), + unlist( + ahorro_paises %>% + slice_max(pop75, n = 6) %>% + arrange(desc(pop75)))), + "Bien hecho!"), pass_if(~ identical(unlist(.result), - unlist(LifeCycleSavings[order(LifeCycleSavings$pop75, - decreasing = TRUE)[1:6],])), + unlist( + ahorro_paises[order(ahorro_paises$pop75, + decreasing = TRUE)[1:6],])), "¡Bien hecho!") ) ``` - - From 260c2d762560445a0e099401700329e788b42276 Mon Sep 17 00:00:00 2001 From: andreavargasmontero Date: Sun, 31 Oct 2021 17:29:03 -0600 Subject: [PATCH 18/29] review de pizarra ejercicios resumir --- .../pizarra_ejercicios_resumir.Rmd | 21 +++++++++++-------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/inst/tutorials/pizarra_ejercicios_resumir/pizarra_ejercicios_resumir.Rmd b/inst/tutorials/pizarra_ejercicios_resumir/pizarra_ejercicios_resumir.Rmd index d47b17e..9805e50 100644 --- a/inst/tutorials/pizarra_ejercicios_resumir/pizarra_ejercicios_resumir.Rmd +++ b/inst/tutorials/pizarra_ejercicios_resumir/pizarra_ejercicios_resumir.Rmd @@ -73,7 +73,9 @@ premios <- tibble( ``` ```{r, echo=FALSE, out.width="35%", fig.align = "center"} -knitr::include_graphics("https://storage.googleapis.com/datos_cursos/ixpantia_introR/ixpantia_logo.png") +knitr::include_graphics( + "https://storage.googleapis.com/datos_cursos/ixpantia_introR/ixpantia_logo.png" + ) ``` ## Datos @@ -82,7 +84,9 @@ Para la sesión utilizaremos tres conjuntos de datos distintos: ### **directores** -Contiene información sobre 5 directores de cine. Consta de 2 variables y 5 observaciones. +Contiene información sobre 5 directores de cine. Consta de 2 variables y 5 +observaciones. + ```{r} glimpse(directores) ``` @@ -96,7 +100,9 @@ Descripción de las columnas: ### **peliculas** -Contiene información sobre 5 películas conocidas. Consta de de 7 observaciones y 2 variables. +Contiene información sobre 5 películas conocidas. Consta de de 7 observaciones +y 2 variables. + ```{r} glimpse(peliculas) ``` @@ -143,8 +149,8 @@ de forma que podamos calcular el número de películas de cada director. grade_result( pass_if(~ identical(unlist(.result), unlist(inner_join(directores, peliculas) %>% - group_by(director) %>% - tally())), + group_by(director) %>% + tally())), "¡Excelente!") ) ``` @@ -206,9 +212,7 @@ question("¿Qué resulta de un `full_join` entre directores y peliculas?", correct = "Correcto") ``` -### Ejercicio E: ¿Qué resultaría de un `anti_join` entre **peliculas** y **directores**? - -¿Cuántas observaciones resultarían de aplicar un `anti_join` entre **peliculas** y **directores**? +### Ejercicio E: ¿Cuántas observaciones resultarían de aplicar un `anti_join` entre **peliculas** y **directores**? ```{r E, echo = FALSE} question("¿Qué resultaría de un `anti_join` entre peliculas y directores? ", @@ -219,4 +223,3 @@ question("¿Qué resultaría de un `anti_join` entre peliculas y directores? ", incorrect = "Incorrecto", correct = "Correcto") ``` - From d3a1b40e7a20252177514b464b89c7ee5c167c31 Mon Sep 17 00:00:00 2001 From: andreavargasmontero Date: Sun, 31 Oct 2021 17:35:11 -0600 Subject: [PATCH 19/29] review de pizarra_dplyr --- inst/tutorials/pizarra_dplyr/pizarra_dplyr.Rmd | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/inst/tutorials/pizarra_dplyr/pizarra_dplyr.Rmd b/inst/tutorials/pizarra_dplyr/pizarra_dplyr.Rmd index e4032e2..5aa28ef 100644 --- a/inst/tutorials/pizarra_dplyr/pizarra_dplyr.Rmd +++ b/inst/tutorials/pizarra_dplyr/pizarra_dplyr.Rmd @@ -25,7 +25,9 @@ library(learnr) library(dplyr) library(gradethis) -gapminder <- readr::read_csv('https://raw.githubusercontent.com/OHI-Science/data-science-training/master/data/gapminder.csv') +gapminder <- readr::read_csv( + 'https://raw.githubusercontent.com/OHI-Science/data-science-training/master/data/gapminder.csv' + ) promedio <- gapminder %>% group_by(country) %>% @@ -35,7 +37,9 @@ tutorial_options(exercise.checker = gradethis::grade_learnr) ``` ```{r, echo=FALSE, out.width="35%", fig.align = "center"} -knitr::include_graphics("https://storage.googleapis.com/datos_cursos/ixpantia_introR/ixpantia_logo.png") +knitr::include_graphics( + "https://storage.googleapis.com/datos_cursos/ixpantia_introR/ixpantia_logo.png" + ) ``` ## Datos: **gapminder** @@ -182,8 +186,7 @@ gapminder %>% grade_result( pass_if(~ identical(unlist(.result), unlist(gapminder %>% - mutate(multiplicacion = pop*gdpPercap))), + mutate(multiplicacion = pop * gdpPercap))), "¡Buenisimo!") ) ``` - From cfd0e47482b66e37fd251563ad8500bbf3d2f519 Mon Sep 17 00:00:00 2001 From: andreavargasmontero Date: Sun, 31 Oct 2021 17:36:35 -0600 Subject: [PATCH 20/29] review de pizarra coercion --- .../pizarra_coercion/pizarra_coercion.Rmd | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/inst/tutorials/pizarra_coercion/pizarra_coercion.Rmd b/inst/tutorials/pizarra_coercion/pizarra_coercion.Rmd index 306c2e4..2a75205 100644 --- a/inst/tutorials/pizarra_coercion/pizarra_coercion.Rmd +++ b/inst/tutorials/pizarra_coercion/pizarra_coercion.Rmd @@ -34,21 +34,27 @@ vector_5 <- c("R","ixpantia", "RStudio", 2) ``` ```{r, echo=FALSE, out.width="35%", fig.align = "center"} -knitr::include_graphics("https://storage.googleapis.com/datos_cursos/ixpantia_introR/ixpantia_logo.png") +knitr::include_graphics( + "https://storage.googleapis.com/datos_cursos/ixpantia_introR/ixpantia_logo.png" + ) ``` ## Datos -Los datos en este caso son realmente vectores que tienen distintas características útiles para los ejercicios que vienen más adelante. En cada pregunta se muestra la creación del vector que se utilizará. - +Los datos en este caso son realmente vectores que tienen distintas +características útiles para los ejercicios que vienen más adelante. En cada +pregunta se muestra la creación del vector que se utilizará. ## Preguntas -A continuación se muestran una serie de preguntas de selección única. Además se proporciona un espacio que usted puede utilizar para experimentar con los distintos vectores y poder responder las preguntas correctamente. +A continuación se muestran una serie de preguntas de selección única. Además se +proporciona un espacio que usted puede utilizar para experimentar con los +distintos vectores y poder responder las preguntas correctamente. ### Pregunta 1 Observe el siguiente vector: + ```{r v1_1, exercise = TRUE} vector_1 <- c(10, 20, 30) @@ -65,6 +71,7 @@ question("¿Qué pasa con si le agregamos una letra al `vector_1`?", ### Pregunta 2 Observe el siguiente vector: + ```{r v2_1, exercise = TRUE} vector_2 <- c("a", "b", "c") @@ -111,6 +118,7 @@ question("¿Qué sucede con la expresion `FALSE` si aplicamos la función `as.nu ### Pregunta 5 Observe el siguiente vector: + ```{r v5_1, exercise = TRUE} vector_5 <- c("R","ixpantia", "RStudio", 2) From ce4ae9e71260a00069fdac433adb0d227402dac7 Mon Sep 17 00:00:00 2001 From: andreavargasmontero Date: Sun, 31 Oct 2021 17:38:39 -0600 Subject: [PATCH 21/29] review de pizarra advanced --- .../pizarra_advanced/pizarra_advanced.Rmd | 40 +++++++++++-------- 1 file changed, 24 insertions(+), 16 deletions(-) diff --git a/inst/tutorials/pizarra_advanced/pizarra_advanced.Rmd b/inst/tutorials/pizarra_advanced/pizarra_advanced.Rmd index 8651939..a35b790 100644 --- a/inst/tutorials/pizarra_advanced/pizarra_advanced.Rmd +++ b/inst/tutorials/pizarra_advanced/pizarra_advanced.Rmd @@ -31,43 +31,48 @@ library(tidyr) library(gradethis) tutorial_options(exercise.checker = gradethis::grade_learnr) - - temp = tempfile(fileext = ".xlsx") dataURL <- "https://storage.googleapis.com/datos_cursos/properati-AR-2017-08-01-properties_short.xlsx" -download.file(dataURL, destfile = temp, mode='wb') +download.file(dataURL, destfile = temp, mode = 'wb') sell_0217 <- readxl::read_excel(temp) -propiedades <- sell_0217[1:1000,] %>% +propiedades <- sell_0217 %>% + slice_head(n = 1000) select(-c(operation, country_name, geonames_id, lat, lon)) - sell_0217 %>% rename(id_nuevo = id) rm(sell_0217) prueba <- propiedades %>% - select(property_type, currency, price, surface_total_in_m2, surface_covered_in_m2) %>% + select(property_type, currency, price, + surface_total_in_m2, surface_covered_in_m2) %>% sample_frac(0.1) prueba <- propiedades %>% sample_frac(0.01) %>% mutate(mes = month(created_on)) %>% mutate(property_factor = as.factor(property_type)) %>% - select(property_factor, mes, price_aprox_usd, surface_total_in_m2, surface_covered_in_m2) + select(property_factor, mes, price_aprox_usd, + surface_total_in_m2, surface_covered_in_m2) ``` ```{r, echo=FALSE, out.width="35%", fig.align = "center"} -knitr::include_graphics("https://storage.googleapis.com/datos_cursos/ixpantia_introR/ixpantia_logo.png") +knitr::include_graphics( + "https://storage.googleapis.com/datos_cursos/ixpantia_introR/ixpantia_logo.png" + ) ``` ## Datos: **propiedades** -Este conjunto de datos incluye de información sobre propiedades en venta en Argentina en el 2017 de la compañía **Properati**. +Este conjunto de datos incluye de información sobre propiedades en venta en +Argentina en el 2017 de la compañía **Properati**. + ```{r} glimpse(propiedades) ``` + Descripción de las variables | Variable | Descripción | @@ -102,7 +107,10 @@ Descripción de las variables En el conjunto de datos **propiedades** hay una variable llamada `surface_total_in_m2` que describe la superficie total de la propiedad. Una -segunda variable, `property_type`, contiene el tipo de propiedad. Ahora descubra cuánta superficie tienen las propiedades de tipo casa y tipo apartamento en promedio. +segunda variable, `property_type`, contiene el tipo de propiedad. Ahora descubra +cuánta superficie tienen las propiedades de tipo casa y tipo apartamento en +promedio. + ```{r prom, exercise = TRUE, exercise.lines = 8} propiedades %>% @@ -126,10 +134,10 @@ grade_result( ### ¿Cuál es el estado más costoso en Argentina en dólares? -En el conjunto de datos **propiedades** hay una variable llamada `price_aprox_usd` -que contiene el precio aproximado en dólares de la propiedad. Utilizando esta -variable, descubra cuál es el estado (`state_name`) más costoso en Argentina -basado en propiedades. +En el conjunto de datos **propiedades** hay una variable llamada +`price_aprox_usd` que contiene el precio aproximado en dólares de la propiedad. +Utilizando esta variable, descubra cuál es el estado (`state_name`) más +costoso en Argentina basado en propiedades. ```{r costo, exercise = TRUE} propiedades %>% @@ -146,7 +154,8 @@ grade_result( unlist(propiedades %>% group_by(state_name) %>% summarise(precio_promedio = mean(price_aprox_usd, - na.rm = TRUE)) %>% + na.rm = TRUE) + ) %>% arrange(desc(precio_promedio)))), "¡Excelente!") ) @@ -209,4 +218,3 @@ grade_result( "¡Bien hecho!") ) ``` - From e4071aa93b3e8193995952f6383f3cb6ef19e12f Mon Sep 17 00:00:00 2001 From: andreavargasmontero Date: Sun, 31 Oct 2021 17:40:04 -0600 Subject: [PATCH 22/29] review de introduccion --- inst/tutorials/introduccion/introduccion.Rmd | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/inst/tutorials/introduccion/introduccion.Rmd b/inst/tutorials/introduccion/introduccion.Rmd index a582c1e..661cfb4 100644 --- a/inst/tutorials/introduccion/introduccion.Rmd +++ b/inst/tutorials/introduccion/introduccion.Rmd @@ -60,16 +60,19 @@ promedio de algún objeto. Podemos utilizarla para obtener el promedio de las notas de un curso que tenemos guardadas en el objeto `notas`. + ```{r ver_notas} notas ``` Se utiliza de la siguiente forma: + ```{r ejemplo_funcion} mean(notas) ``` ### Data frames + Una de las estructuras más comunes en R son los data frames o conjuntos de datos. En palabras simples estos son tablas que contienen datos y están formadas por filas y columnas. Para crear uno de estos objetos en R podemos @@ -120,6 +123,7 @@ Para buscar la ayuda de un paquete: ## Ejercicios ### Utilice la función `max()` + La función `max` como es de esperar, nos devuelve el número máximo del objeto que le indiquemos. Utilícela para obtener el máximo de `y <- 10:100` @@ -140,7 +144,6 @@ grade_result( ) ``` - ### Busque la ayuda o documentación de la función `mean()` ```{r ayuda, exercise = TRUE} @@ -166,7 +169,7 @@ grade_result( ``` ```{r seg_col-hint-1} -[, 2] +"[, 2]" ``` ```{r seg_col-check} @@ -211,7 +214,7 @@ question("¿Cómo se intala el paquete `dplyr`?", ``` ```{r class-hint-1} -class() +"class()" ``` ```{r class-check} @@ -233,8 +236,11 @@ ggplot(ventas, aes(x = tipo_producto, y = total_ganancias)) + ``` Al hacerlo, obtengo el siguiente error: + ```{r error, echo=FALSE, out.width="65%", fig.align = "center"} -knitr::include_graphics("https://storage.googleapis.com/datos_cursos/ixpantia_introR/error_libreria.png") +knitr::include_graphics( + "https://storage.googleapis.com/datos_cursos/ixpantia_introR/error_libreria.png" + ) ``` ```{r error_ejercicio, echo=FALSE} From 42f4835c08731f0a5880911937216a5a673bad3e Mon Sep 17 00:00:00 2001 From: andreavargasmontero Date: Sun, 31 Oct 2021 17:44:16 -0600 Subject: [PATCH 23/29] Ref #77 --- introR.Rproj | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 introR.Rproj diff --git a/introR.Rproj b/introR.Rproj new file mode 100644 index 0000000..d596992 --- /dev/null +++ b/introR.Rproj @@ -0,0 +1,21 @@ +Version: 1.0 + +RestoreWorkspace: Default +SaveWorkspace: Default +AlwaysSaveHistory: Default + +EnableCodeIndexing: Yes +UseSpacesForTab: Yes +NumSpacesForTab: 2 +Encoding: UTF-8 + +RnwWeave: Sweave +LaTeX: pdfLaTeX + +AutoAppendNewline: Yes +StripTrailingWhitespace: Yes + +BuildType: Package +PackageUseDevtools: Yes +PackageInstallArgs: --no-multiarch --with-keep.source +PackageCheckArgs: --as-cran From 9b61f1c4a9432fc4d8e968e1eeeed5600be709e4 Mon Sep 17 00:00:00 2001 From: andreavargasmontero Date: Sun, 31 Oct 2021 17:50:26 -0600 Subject: [PATCH 24/29] Ref #82 agrega tutorial --- .../tutorials/estilo_codigo/estilo_codigo.Rmd | 227 ++++++++++++++++++ 1 file changed, 227 insertions(+) create mode 100644 inst/tutorials/estilo_codigo/estilo_codigo.Rmd diff --git a/inst/tutorials/estilo_codigo/estilo_codigo.Rmd b/inst/tutorials/estilo_codigo/estilo_codigo.Rmd new file mode 100644 index 0000000..6644438 --- /dev/null +++ b/inst/tutorials/estilo_codigo/estilo_codigo.Rmd @@ -0,0 +1,227 @@ +--- +title: "Sesión extra: Estilo de código" +output: + learnr::tutorial: + language: es + css: https://storage.googleapis.com/datos_cursos/ixpantia_introR/intro_r.css +runtime: shiny_prerendered +description: > + Ejercicios para aprender el estilo de código recomendado en ixpantia?. +--- + + + +```{r setup, include=FALSE} +library(learnr) +knitr::opts_chunk$set(echo = FALSE) +``` + +```{r, echo=FALSE, out.width="35%", fig.align = "center"} +knitr::include_graphics( + "https://storage.googleapis.com/datos_cursos/ixpantia_introR/ixpantia_logo.png" + ) +``` + +## Introducción + +Hay muchas formas de escribir código en R. Entre mas código escribes, y +sobretodo entre mas código tienes que leer, más apreciarás un estilo uniforme. +Te permitirá leer tu propio código y volver a entenderlo más fácilmente después +de un largo tiempo sin haberlo visto. Además, un estilo uniforme te permitirá +trabajar más efectivamente con otros. + +Aquí podrás encontrar los diferentes elementos que pueden estar en un guía de +estilo. Esta basado en el guía de estilo de Hadley Wickham. Este a su vez esta +basado en el guía de estilo de Google. Además, se incluyen las sugerencias que +son relevantes para hispanohablantes. Esto porque en el Castellano estamos +acostumbrados, entre otras cosas, a tildes, eñes y otros caracteres que +necesitan su propia discusión. + +## Nomenclatura + +### Documentos + +#### Tip 1 + +Los archivos deben tener un nombre descriptivo, no tener caracteres especiales (tildes, eñes) y terminar en .R. + +#### Ejercicio + +```{r nombres_docs} +question("¿Cuál (es) de estos nombres de archivos es (son) correcto (s)?", + answer("analisis.R"), + answer("caracterización.R"), + answer("analisis_factorial.R", correct = TRUE), + answer("análisis_confirmatorio.R"), + answer("eda.R", correct = TRUE) +) +``` + +#### Tip 2 + +Si tu solución o estudio requiere que los archivos se corran en una secuencia predeterminada, añade prefijos con numerales. + +#### Ejercicio + +```{r nombres_docs2} +question("¿Cuál (es) de estos nombres de archivos es (son) correcto (s)?", + answer("primer_script.R"), + answer("1_analisis_exploratorio.R", correct = TRUE), + answer("dos-modelo-predictivo.R") +) +``` + +### Objetos + +#### Tip 3 + +Nombres de variables y de funciones deben ser en minúscula y que se ha de usar +un guión bajo (_) para separar palabras dentro de un nombre. Usar sustantivos +para los nombres de las variables y verbos para las funciones. Nunca uses +caracteres especiales como tildes y eñes en tus nombres de objetos. + +#### Ejercicio + +```{r nombres_objs} +question("¿Cuál (es) de estos nombres de objetos es (son) correcto (s)?", + answer("primer_cuartil", correct = TRUE), + answer("CuartilUno"), + answer("C1"), + answer("cuartil_1", correct = TRUE) +) +``` + +#### Tip 4 + +Si usas nombres de funciones que ya están en uso es probable que generes +confusión. Trata de evitarlo hasta donde sea posible. + +#### Ejercicio + +```{r nombres_objs2} +question("¿Cuál (es) de estos nombres de funciones es (son) correcto (s)?", + answer("F <- function(x) read.table(x)"), + answer("lee_tabla <- function(x) read.table(x)", + correct = TRUE), + answer("ls <- function(x) read.table(x)") +) +``` + +## Sintaxis + +### Espacios + +#### Tip 5 + +Antes y después de todos los operadores infijos va un espacio (=, +, <-, etc). +Esto aplica aún para el signo equivalente (=) en las llamada de una función. No +hay espacios antes de una coma, pero una coma siempre es seguida por un espacio. + +#### Ejercicio + +```{r espacios_num} +question("¿Cuál (es) de estos comandos es (son) correcto (s)?", + answer("profundidad<-round((pies + pulgadas/12), 2)"), + answer("profundidad<-round((pies+pulgadas/12), 2)"), + answer("profundidad <- round((pies+pulgadas/12), 2)"), + answer("profundidad <- round((pies + pulgadas / 12), 2)", + correct = TRUE) +) +``` + +#### Tip 6 + +No se usan espacios para `:`, `::` ni `:::`. + +#### Ejercicio + +```{r espacios_dospts} +question("¿Cuál (es) de estos comandos es (son) correcto (s)?", + answer("x <- 2:23", correct = TRUE), + answer("base::round", correct = TRUE), + answer("y <- 10 : 54"), + answer("dplyr :: select()") +) +``` + +#### Tip 7 + +Antes del paréntesis izquierdo va un espacio, a no ser que estés llamando una +función en cual caso no se usa un espacio. + +#### Ejercicio + +```{r espacios_izq} +question("¿Cuál (es) de estos comandos es (son) correcto (s)?", + answer("qplot(x, y)", correct = TRUE), + answer("plot (x, y)"), + answer("if (debug) do(x)", correct = TRUE), + answer("if(condicion)function(x)") +) +``` + +#### Tip 8 + +Cuando quieras introducir mas orden en el código alineándolo, por ejemplo, +sobre los símbolos de igualdad, está bien usar espacios para tal efecto + +#### Tip 9 + +Los paréntesis y corchetes `([])` no llevan espacios a su alrededor. Si hay una +coma, aplican las convenciones que se mencionaron antes. + +#### Ejercicio + +```{r parent} +question("¿Cuál (es) de estos comandos es (son) correcto (s)?", + answer("if ( depurando ) x <- 34"), + answer("if (depurando) x <- 34", correct = TRUE), + answer("resultados[1,]"), + answer("resultados[1 ,]"), + answer("resultados[5, 1]", correct = TRUE) +) +``` + +### Punto y coma + +#### Tip 10 + +No uses punto y coma dentro del código. No es necesario, y prácticamente ya no +se usa. + +### Llaves + +#### Tip 11 + +Abrir una llave nunca debería ocurrir en su propia línea y siempre se sigue con +una línea nueva. Una llave que cierra siempre debe ir en su propia línea a +menos que sea `else`. Siempre usa llaves cuando estás usando construcciones con +`if`, aún cuando no es posible no hacerlo. + +### Longitud de lineas + +#### Tip 12 + +Trata de limitar tu código a una longitud de 80 caracteres por linea. Esto cabe +cómodamente en una página impresa a un tamaño de la fuente razonable. + +### Asignación + +#### Tip 13 + +Es mejor usar solo `<-` para asignación en vez de `=` y usar el símbolo de +igualdad solamente para argumentos dentro de funciones. + +#### Ejercicio + +```{r asigna} +question("¿Cuál (es) de estos comandos es (son) correcto (s)?", + answer("y <- 23", correct = TRUE) , + answer("y = 23") +) +``` + From d36b71f866c014766c4c058509435eec7f6a3419 Mon Sep 17 00:00:00 2001 From: andreavargasmontero Date: Sun, 31 Oct 2021 17:54:29 -0600 Subject: [PATCH 25/29] traduce mensajes de feedback --- .../tutorials/estilo_codigo/estilo_codigo.Rmd | 36 ++++++++++++++----- 1 file changed, 27 insertions(+), 9 deletions(-) diff --git a/inst/tutorials/estilo_codigo/estilo_codigo.Rmd b/inst/tutorials/estilo_codigo/estilo_codigo.Rmd index 6644438..e2b4ac8 100644 --- a/inst/tutorials/estilo_codigo/estilo_codigo.Rmd +++ b/inst/tutorials/estilo_codigo/estilo_codigo.Rmd @@ -57,7 +57,9 @@ question("¿Cuál (es) de estos nombres de archivos es (son) correcto (s)?", answer("caracterización.R"), answer("analisis_factorial.R", correct = TRUE), answer("análisis_confirmatorio.R"), - answer("eda.R", correct = TRUE) + answer("eda.R", correct = TRUE), + correct = "Correcto", + incorrect = "Incorrecto" ) ``` @@ -71,7 +73,9 @@ Si tu solución o estudio requiere que los archivos se corran en una secuencia p question("¿Cuál (es) de estos nombres de archivos es (son) correcto (s)?", answer("primer_script.R"), answer("1_analisis_exploratorio.R", correct = TRUE), - answer("dos-modelo-predictivo.R") + answer("dos-modelo-predictivo.R"), + correct = "Correcto", + incorrect = "Incorrecto" ) ``` @@ -91,7 +95,9 @@ question("¿Cuál (es) de estos nombres de objetos es (son) correcto (s)?", answer("primer_cuartil", correct = TRUE), answer("CuartilUno"), answer("C1"), - answer("cuartil_1", correct = TRUE) + answer("cuartil_1", correct = TRUE), + correct = "Correcto", + incorrect = "Incorrecto" ) ``` @@ -107,7 +113,9 @@ question("¿Cuál (es) de estos nombres de funciones es (son) correcto (s)?", answer("F <- function(x) read.table(x)"), answer("lee_tabla <- function(x) read.table(x)", correct = TRUE), - answer("ls <- function(x) read.table(x)") + answer("ls <- function(x) read.table(x)"), + correct = "Correcto", + incorrect = "Incorrecto" ) ``` @@ -129,7 +137,9 @@ question("¿Cuál (es) de estos comandos es (son) correcto (s)?", answer("profundidad<-round((pies+pulgadas/12), 2)"), answer("profundidad <- round((pies+pulgadas/12), 2)"), answer("profundidad <- round((pies + pulgadas / 12), 2)", - correct = TRUE) + correct = TRUE), + correct = "Correcto", + incorrect = "Incorrecto" ) ``` @@ -144,7 +154,9 @@ question("¿Cuál (es) de estos comandos es (son) correcto (s)?", answer("x <- 2:23", correct = TRUE), answer("base::round", correct = TRUE), answer("y <- 10 : 54"), - answer("dplyr :: select()") + answer("dplyr :: select()"), + correct = "Correcto", + incorrect = "Incorrecto" ) ``` @@ -160,7 +172,9 @@ question("¿Cuál (es) de estos comandos es (son) correcto (s)?", answer("qplot(x, y)", correct = TRUE), answer("plot (x, y)"), answer("if (debug) do(x)", correct = TRUE), - answer("if(condicion)function(x)") + answer("if(condicion)function(x)"), + correct = "Correcto", + incorrect = "Incorrecto" ) ``` @@ -182,7 +196,9 @@ question("¿Cuál (es) de estos comandos es (son) correcto (s)?", answer("if (depurando) x <- 34", correct = TRUE), answer("resultados[1,]"), answer("resultados[1 ,]"), - answer("resultados[5, 1]", correct = TRUE) + answer("resultados[5, 1]", correct = TRUE), + correct = "Correcto", + incorrect = "Incorrecto" ) ``` @@ -221,7 +237,9 @@ igualdad solamente para argumentos dentro de funciones. ```{r asigna} question("¿Cuál (es) de estos comandos es (son) correcto (s)?", answer("y <- 23", correct = TRUE) , - answer("y = 23") + answer("y = 23"), + correct = "Correcto", + incorrect = "Incorrecto" ) ``` From 51153fe7ddc7dbc444a3c0e05d178beb70e13613 Mon Sep 17 00:00:00 2001 From: andreavargasmontero Date: Sun, 31 Oct 2021 18:20:06 -0600 Subject: [PATCH 26/29] Final review + mensajes de feedback corregidos --- inst/tutorials/introduccion/introduccion.Rmd | 14 ++++--- .../pizarra_advanced/pizarra_advanced.Rmd | 2 +- .../pizarra_coercion/pizarra_coercion.Rmd | 20 +++++++--- .../pizarra_ejercicios_resumir.Rmd | 5 ++- .../pizarra_estructuras_r.Rmd | 24 +++++++---- .../pizarra_ggplot_introduccion.Rmd | 3 +- .../pizarra_tidy_data/pizarra_tidy_data.Rmd | 20 ++++++---- .../tutorials/pizarra_tidyr/pizarra_tidyr.Rmd | 30 +++++++++----- .../pizarra_tiempos_fechas.Rmd | 5 +-- .../tarea_ejercicios_resumir.Rmd | 6 +-- .../tarea_estilo_codigo.Rmd | 40 ++++++++++++++----- .../tarea_estructuras_r.Rmd | 12 ++++-- .../tarea_ggplot_avanzado.Rmd | 1 - .../tarea_ggplot_introduccion.Rmd | 22 +++++----- .../tarea_tidy_data/tarea_tidy_data.Rmd | 28 ++++++++----- inst/tutorials/tarea_tidyr/tarea_tidyr.Rmd | 10 ++--- 16 files changed, 158 insertions(+), 84 deletions(-) diff --git a/inst/tutorials/introduccion/introduccion.Rmd b/inst/tutorials/introduccion/introduccion.Rmd index 661cfb4..364b6fc 100644 --- a/inst/tutorials/introduccion/introduccion.Rmd +++ b/inst/tutorials/introduccion/introduccion.Rmd @@ -140,7 +140,7 @@ max() grade_result( pass_if(~ identical(unlist(.result), unlist(max(y))), - "¡Buenísimo!") + "¡Bien!") ) ``` @@ -193,7 +193,7 @@ install.packages() ```{r library-check} grade_result( pass_if(~ identical(.result, library(learnr)), - "¡Buenísimo!") + "¡Muy bien!") ) ``` @@ -203,7 +203,9 @@ grade_result( question("¿Cómo se intala el paquete `dplyr`?", answer("install_packages(dplyr)"), answer("installPackages(dplyr)"), - answer("install.packages(\"dplyr\")", correct = TRUE) + answer("install.packages(\"dplyr\")", correct = TRUE), + correct = "Correcto", + incorrect = "Incorrecto" ) ``` @@ -220,7 +222,7 @@ question("¿Cómo se intala el paquete `dplyr`?", ```{r class-check} grade_result( pass_if(~ identical(.result, class(y)), - "¡Buenísimo!") + "¡Excelente!") ) ``` @@ -249,6 +251,8 @@ question("¿Porqué se da esta error?", answer("Porque no ha llamado la librería `ggplot2`", correct = TRUE), answer("Porque los datos `ventas` no fueron cargados"), - answer("Porque hay un error ortográfico en la instrucción") + answer("Porque hay un error ortográfico en la instrucción"), + correct = "Correcto", + incorrect = "Incorrecto" ) ``` diff --git a/inst/tutorials/pizarra_advanced/pizarra_advanced.Rmd b/inst/tutorials/pizarra_advanced/pizarra_advanced.Rmd index a35b790..887cf9e 100644 --- a/inst/tutorials/pizarra_advanced/pizarra_advanced.Rmd +++ b/inst/tutorials/pizarra_advanced/pizarra_advanced.Rmd @@ -128,7 +128,7 @@ grade_result( summarize( promedio = mean(surface_total_in_m2, na.rm = TRUE)))), - "¡Excelente!") + "¡Muy bien!") ) ``` diff --git a/inst/tutorials/pizarra_coercion/pizarra_coercion.Rmd b/inst/tutorials/pizarra_coercion/pizarra_coercion.Rmd index 2a75205..6ada7cf 100644 --- a/inst/tutorials/pizarra_coercion/pizarra_coercion.Rmd +++ b/inst/tutorials/pizarra_coercion/pizarra_coercion.Rmd @@ -64,7 +64,9 @@ vector_1 <- c(10, 20, 30) question("¿Qué pasa con si le agregamos una letra al `vector_1`?", answer("Sigue siendo un vector numérico porque la mayoría de elementos son números"), answer("Se convierte en un `character`", correct = TRUE) , - answer("Se convierte en un `logical`") + answer("Se convierte en un `logical`"), + correct = "Correcto", + incorrect = "Incorrecto" ) ``` @@ -81,7 +83,9 @@ vector_2 <- c("a", "b", "c") question("¿Qué ocurre con los datos del vector_2 si le agregamos un número? ¿En qué se convierten?", answer("Sigue siendo un `character`", correct = TRUE), answer("Se convierte en un `numeric`"), - answer("Se convierte en un `logical`") + answer("Se convierte en un `logical`"), + correct = "Correcto", + incorrect = "Incorrecto" ) ``` @@ -96,7 +100,9 @@ vector_3 <- c(TRUE, TRUE, FALSE, 0, 0, 1) question("¿Qué tipo es este nuevo vector_3_2?", answer("Sigue siendo un `logical`"), answer("Se convierte en un `numeric`", correct = TRUE), - answer("Se convierte en un `character`") + answer("Se convierte en un `character`"), + correct = "Correcto", + incorrect = "Incorrecto" ) ``` @@ -111,7 +117,9 @@ vector_4 <- c(2, FALSE, 5) question("¿Qué sucede con la expresion `FALSE` si aplicamos la función `as.numeric` al vector 4?", answer("Da un error"), answer("La convierte en un NA o valor faltante"), - answer("La convierte en 0", correct = TRUE) + answer("La convierte en 0", correct = TRUE), + correct = "Correcto", + incorrect = "Incorrecto" ) ``` @@ -128,6 +136,8 @@ vector_5 <- c("R","ixpantia", "RStudio", 2) question("¿Qué ocurre con los datos de vector_5 al aplicarle la función `as.logical`? ¿En qué se convierten?", answer("Se convierte en NAs o valores faltantes", correct = TRUE), answer("Se convierte en TRUE o FALSE"), - answer("Se convierte en un `character`") + answer("Se convierte en un `character`"), + correct = "Correcto", + incorrect = "Incorrecto" ) ``` diff --git a/inst/tutorials/pizarra_ejercicios_resumir/pizarra_ejercicios_resumir.Rmd b/inst/tutorials/pizarra_ejercicios_resumir/pizarra_ejercicios_resumir.Rmd index 9805e50..5fe1ae7 100644 --- a/inst/tutorials/pizarra_ejercicios_resumir/pizarra_ejercicios_resumir.Rmd +++ b/inst/tutorials/pizarra_ejercicios_resumir/pizarra_ejercicios_resumir.Rmd @@ -151,7 +151,7 @@ grade_result( unlist(inner_join(directores, peliculas) %>% group_by(director) %>% tally())), - "¡Excelente!") + "¡Bien hecho!") ) ``` @@ -207,7 +207,8 @@ question("¿Qué resulta de un `full_join` entre directores y peliculas?", answer("Un conjunto de datos con solo las observaciones que coinciden en ambos casos"), answer("Un conjunto de datos con las observaciones de directores que coinciden en películas"), answer("Un conjunto de datos con las observaciones de películas que coinciden en directores"), - answer("Un conjunto de datos que contiene la información de ambos sets", correct = TRUE), + answer("Un conjunto de datos que contiene la información de ambos sets", + correct = TRUE), incorrect = "Incorrecto", correct = "Correcto") ``` diff --git a/inst/tutorials/pizarra_estructuras_r/pizarra_estructuras_r.Rmd b/inst/tutorials/pizarra_estructuras_r/pizarra_estructuras_r.Rmd index 79d012e..5d3689a 100644 --- a/inst/tutorials/pizarra_estructuras_r/pizarra_estructuras_r.Rmd +++ b/inst/tutorials/pizarra_estructuras_r/pizarra_estructuras_r.Rmd @@ -232,7 +232,9 @@ ahorro_paises$pop15 ```{r pob15-check} grade_result( - pass_if(~ identical(unlist(.result), unlist(max(ahorro_paises$pop15))), "¡Buenísimo!") + pass_if(~ identical(unlist(.result), + unlist(max(ahorro_paises$pop15))), + "¡Buenísimo!") ) ``` @@ -254,7 +256,7 @@ población. grade_result( pass_if(~ identical(unlist(.result), unlist(min(ahorro_paises$pop75))), - "¡Muy bien!") + "¡Bien!") ) ``` @@ -277,11 +279,10 @@ grade_result( pass_if(~ identical(unlist(.result), unlist( colnames(ahorro_paises)[4] <- "disposable_income")), - "Bien hecho!") + "¡Muy bien!") ) ``` - ### 5. ¿Por qué no es recomendable hacer subsets por posición? En el mundo de los datos se menciona que no es recomendable hacer subsets por @@ -295,7 +296,8 @@ question("¿Por qué no es recomendable hacer subsets por posición?", answer("Porque los datos pueden cambiar en el futuro y la posición de lo que buscabamos puede cambiar", correct = TRUE), answer("Opcion al escribirlo me puedo equivocar y poner la posición que no es"), - incorrect = "Incorrecto.") + incorrect = "Incorrecto", + correct = "Correcto") ``` ### 6. Generar nueva columna que contenga la suma de pop15 y pop75 @@ -315,7 +317,11 @@ porcentajes. Llame a esta nueva columna "suma". ```{r suma-check} grade_result( - pass_if(~ identical(unlist(.result), unlist(ahorro_paises$suma <- ahorro_paises$pop15 + ahorro_paises$pop75)), "Bien hecho!") + pass_if(~ identical(unlist(.result), + unlist( + ahorro_paises$suma <- ahorro_paises$pop15 + ahorro_paises$pop75 + )), + "¡Excelente!") ) ``` @@ -336,7 +342,11 @@ subset ```{r porc-check} grade_result( - pass_if(~ identical(unlist(.result), unlist(subset(ahorro_paises, ahorro_paises$pop15 < 23 | ahorro_paises$pop75 > 47))), "Bien hecho!") + pass_if(~ identical(unlist(.result), + unlist(subset(ahorro_paises, + ahorro_paises$pop15 < 23 | + ahorro_paises$pop75 > 47))), + "Bien hecho!") ) ``` diff --git a/inst/tutorials/pizarra_ggplot_introduccion/pizarra_ggplot_introduccion.Rmd b/inst/tutorials/pizarra_ggplot_introduccion/pizarra_ggplot_introduccion.Rmd index 19d09b0..7397eb1 100644 --- a/inst/tutorials/pizarra_ggplot_introduccion/pizarra_ggplot_introduccion.Rmd +++ b/inst/tutorials/pizarra_ggplot_introduccion/pizarra_ggplot_introduccion.Rmd @@ -111,7 +111,8 @@ question("¿Cuál es la diferencia entre `geom_point()` y `geom_jitter()`?", correct = TRUE), answer("geom_point es más ordenado ya que hace un espaciamiento uniforme entre los puntos"), answer("geom_point se ve mejor"), - incorrect = "Incorrecto.") + incorrect = "Incorrecto", + correct = "Correcto") ``` ### 2. ¿Cómo podemos hacer para que el abline nos aparezca con los puntos? diff --git a/inst/tutorials/pizarra_tidy_data/pizarra_tidy_data.Rmd b/inst/tutorials/pizarra_tidy_data/pizarra_tidy_data.Rmd index e542548..743685f 100644 --- a/inst/tutorials/pizarra_tidy_data/pizarra_tidy_data.Rmd +++ b/inst/tutorials/pizarra_tidy_data/pizarra_tidy_data.Rmd @@ -55,7 +55,9 @@ fecha_separada <- separate(data = planilla2, col = fecha,into = c("anio", ``` ```{r, echo=FALSE, out.width="35%", fig.align = "center"} -knitr::include_graphics("https://storage.googleapis.com/datos_cursos/ixpantia_introR/ixpantia_logo.png") +knitr::include_graphics( + "https://storage.googleapis.com/datos_cursos/ixpantia_introR/ixpantia_logo.png" + ) ``` ## Dispersar y reorganizar @@ -99,7 +101,11 @@ pivot_wider() ```{r wider2-check} grade_result( - pass_if(~ identical(unlist(.result), unlist(pivot_wider(data = planilla, names_from = Rubro, values_from = Monto))), "Muy bien!") + pass_if(~ identical(unlist(.result), + unlist(pivot_wider(data = planilla, + names_from = Rubro, + values_from = Monto))), + "¡Muy bien!") ) ``` @@ -142,7 +148,7 @@ grade_result( "SUBSIDIO ENFERMEDAD REG SERV CIVIL", "SUBSIDIO ENFERMEDAD NO REG SERV CIVIL"), names_to = "Rubro", values_to = "Monto")))), - "Muy bien!") + "¡Excelente!") ) ``` @@ -175,7 +181,7 @@ fill() grade_result( pass_if(~ identical(unlist(.result), unlist(fill(planillaNAs, Monto, Cedula))), - "Muy bien!") + "¡Bien!") ) ``` @@ -197,7 +203,7 @@ grade_result( pass_if(~ identical(unlist(.result), unlist(replace_na(planillaNAs, list(valor = 99)))), - "Muy bien!") + "¡Buenísimo!") ) ``` @@ -234,7 +240,7 @@ grade_result( col = fecha, into = c("anio", "mes", "dia"), sep = "-"))), - "Muy bien!") + "¡Genial!") ) ``` @@ -258,6 +264,6 @@ grade_result( unlist(unite(data = fecha_separada , col = "FechaPago", anio:dia, sep = "/"))), - "Muy bien!") + "¡Muy bien!") ) ``` diff --git a/inst/tutorials/pizarra_tidyr/pizarra_tidyr.Rmd b/inst/tutorials/pizarra_tidyr/pizarra_tidyr.Rmd index 06dc672..e285dcb 100644 --- a/inst/tutorials/pizarra_tidyr/pizarra_tidyr.Rmd +++ b/inst/tutorials/pizarra_tidyr/pizarra_tidyr.Rmd @@ -42,7 +42,9 @@ gap_largo <- gather(gap_ancho, ``` ```{r, echo=FALSE, out.width="35%", fig.align = "center"} -knitr::include_graphics("https://storage.googleapis.com/datos_cursos/ixpantia_introR/ixpantia_logo.png") +knitr::include_graphics( + "https://storage.googleapis.com/datos_cursos/ixpantia_introR/ixpantia_logo.png" + ) ``` ## Datos: **gap_ancho** @@ -95,10 +97,12 @@ values_to = "obs_values" ```{r gather-check} grade_result( pass_if(~ identical(unlist(.result), - unlist(pivot_longer(gap_ancho,cols= gdpPercap_1952:pop_2007, - names_to = "obstype_year", - values_to = "obs_values"))) - , "¡Buenísimo!") + unlist( + pivot_longer(gap_ancho, + cols= gdpPercap_1952:pop_2007, + names_to = "obstype_year", + values_to = "obs_values"))), + "¡Buenísimo!") ) ``` @@ -126,9 +130,11 @@ cols= gdpPercap_1952:pop_2007 ```{r spread-check} grade_result( - pass_if(~ identical(unlist(.result), unlist(pivot_wider(gap_largo, + pass_if(~ identical(unlist(.result), + unlist(pivot_wider(gap_largo, names_from = obstype_year, - values_from = obs_values))), "¡Excelente!") + values_from = obs_values))), + "¡Excelente!") ) ``` @@ -154,10 +160,12 @@ separate(data = gap_largo, ) ```{r separate-check} grade_result( - pass_if(~ identical(unlist(.result), unlist(separate(data = gap_largo, - col = obstype_year, - into = c('obstype', 'year'), - sep = '_'))), "¡Bien hecho!") + pass_if(~ identical(unlist(.result), + unlist(separate(data = gap_largo, + col = obstype_year, + into = c('obstype', 'year'), + sep = '_'))), + "¡Bien hecho!") ) ``` diff --git a/inst/tutorials/pizarra_tiempos_fechas/pizarra_tiempos_fechas.Rmd b/inst/tutorials/pizarra_tiempos_fechas/pizarra_tiempos_fechas.Rmd index c5d0371..760f97b 100644 --- a/inst/tutorials/pizarra_tiempos_fechas/pizarra_tiempos_fechas.Rmd +++ b/inst/tutorials/pizarra_tiempos_fechas/pizarra_tiempos_fechas.Rmd @@ -48,7 +48,6 @@ knitr::include_graphics( ) ``` - ## Datos: **marriage** Este set de datos contiene información sobre matrimonios registrados en Alabama, @@ -133,7 +132,7 @@ grade_result( pass_if(~ identical(unlist(.result), unlist(matrimonios %>% mutate(duracion = today() - ceremonydate))), - "¡Excelente!") + "¡Genial!") ) ``` @@ -165,7 +164,7 @@ grade_result( ggplot(marriage_duracion, aes(as.numeric(duracion))) + geom_histogram(aes(fill = ..count..))), - "¡Excelente!") + "¡Bien hecho!") ) ``` diff --git a/inst/tutorials/tarea_ejercicios_resumir/tarea_ejercicios_resumir.Rmd b/inst/tutorials/tarea_ejercicios_resumir/tarea_ejercicios_resumir.Rmd index fe5cc65..9f74a6d 100644 --- a/inst/tutorials/tarea_ejercicios_resumir/tarea_ejercicios_resumir.Rmd +++ b/inst/tutorials/tarea_ejercicios_resumir/tarea_ejercicios_resumir.Rmd @@ -140,7 +140,7 @@ ningún personaje y además agregar la columna de `anio_fundacion`. grade_result( pass_if(~ identical(unlist(.result), unlist(left_join(superheroes, editores))), - "¡Muy bien!") + "¡Bien hecho!") ) ``` @@ -162,7 +162,7 @@ Los demás deben de ser excluidos. grade_result( pass_if(~ identical(unlist(.result), unlist(semi_join(superheroes, editores))), - "¡Muy bien!") + "¡Buenísimo!") ) ``` @@ -185,7 +185,7 @@ aquellos personajes que tienen un editor que **NO** aparece en **editores** grade_result( pass_if(~ identical(unlist(.result), unlist(anti_join(superheroes, editores))), - "¡Muy bien!") + "¡Genial!") ) ``` diff --git a/inst/tutorials/tarea_estilo_codigo/tarea_estilo_codigo.Rmd b/inst/tutorials/tarea_estilo_codigo/tarea_estilo_codigo.Rmd index 4722cdf..e55fc9d 100644 --- a/inst/tutorials/tarea_estilo_codigo/tarea_estilo_codigo.Rmd +++ b/inst/tutorials/tarea_estilo_codigo/tarea_estilo_codigo.Rmd @@ -21,7 +21,9 @@ knitr::opts_chunk$set(echo = FALSE) ``` ```{r, echo=FALSE, out.width="35%", fig.align = "center"} -knitr::include_graphics("https://storage.googleapis.com/datos_cursos/ixpantia_introR/ixpantia_logo.png") +knitr::include_graphics( + "https://storage.googleapis.com/datos_cursos/ixpantia_introR/ixpantia_logo.png" + ) ``` ## Introducción @@ -56,7 +58,9 @@ question("¿Cuál (es) de estos nombres de archivos es (son) correcto (s)?", answer("caracterización.R"), answer("analisis_factorial.R", correct = TRUE), answer("análisis_confirmatorio.R"), - answer("eda.R", correct = TRUE) + answer("eda.R", correct = TRUE), + correct = "Correcto", + incorrect = "Incorrecto" ) ``` @@ -70,7 +74,9 @@ Si tu solución o estudio requiere que los archivos se corran en una secuencia p question("¿Cuál (es) de estos nombres de archivos es (son) correcto (s)?", answer("primer_script.R"), answer("1_analisis_exploratorio.R", correct = TRUE), - answer("dos-modelo-predictivo.R") + answer("dos-modelo-predictivo.R"), + correct = "Correcto", + incorrect = "Incorrecto" ) ``` @@ -89,7 +95,9 @@ question("¿Cuál (es) de estos nombres de objetos es (son) correcto (s)?", answer("primer_cuartil", correct = TRUE), answer("CuartilUno"), answer("C1"), - answer("cuartil_1", correct = TRUE) + answer("cuartil_1", correct = TRUE), + correct = "Correcto", + incorrect = "Incorrecto" ) ``` @@ -104,7 +112,9 @@ question("¿Cuál (es) de estos nombres de funciones es (son) correcto (s)?", answer("F <- function(x) read.table(x)"), answer("lee_tabla <- function(x) read.table(x)", correct = TRUE), - answer("ls <- function(x) read.table(x)") + answer("ls <- function(x) read.table(x)"), + correct = "Correcto", + incorrect = "Incorrecto" ) ``` @@ -126,7 +136,9 @@ question("¿Cuál (es) de estos comandos es (son) correcto (s)?", answer("profundidad<-round((pies+pulgadas/12), 2)"), answer("profundidad <- round((pies+pulgadas/12), 2)"), answer("profundidad <- round((pies + pulgadas / 12), 2)", - correct = TRUE) + correct = TRUE), + correct = "Correcto", + incorrect = "Incorrecto" ) ``` @@ -141,7 +153,9 @@ question("¿Cuál (es) de estos comandos es (son) correcto (s)?", answer("x <- 2:23", correct = TRUE), answer("base::round", correct = TRUE), answer("y <- 10 : 54"), - answer("dplyr :: select()") + answer("dplyr :: select()"), + correct = "Correcto", + incorrect = "Incorrecto" ) ``` @@ -157,7 +171,9 @@ question("¿Cuál (es) de estos comandos es (son) correcto (s)?", answer("qplot(x, y)", correct = TRUE), answer("plot (x, y)"), answer("if (debug) do(x)", correct = TRUE), - answer("if(condicion)function(x)") + answer("if(condicion)function(x)"), + correct = "Correcto", + incorrect = "Incorrecto" ) ``` @@ -179,7 +195,9 @@ question("¿Cuál (es) de estos comandos es (son) correcto (s)?", answer("if (depurando) x <- 34", correct = TRUE), answer("resultados[1,]"), answer("resultados[1 ,]"), - answer("resultados[5, 1]", correct = TRUE) + answer("resultados[5, 1]", correct = TRUE), + correct = "Correcto", + incorrect = "Incorrecto" ) ``` @@ -218,6 +236,8 @@ igualdad solamente para argumentos dentro de funciones. ```{r asigna} question("¿Cuál (es) de estos comandos es (son) correcto (s)?", answer("y <- 23", correct = TRUE) , - answer("y = 23") + answer("y = 23"), + correct = "Correcto", + incorrect = "Incorrecto" ) ``` diff --git a/inst/tutorials/tarea_estructuras_r/tarea_estructuras_r.Rmd b/inst/tutorials/tarea_estructuras_r/tarea_estructuras_r.Rmd index 322b76c..03d1bfe 100644 --- a/inst/tutorials/tarea_estructuras_r/tarea_estructuras_r.Rmd +++ b/inst/tutorials/tarea_estructuras_r/tarea_estructuras_r.Rmd @@ -65,6 +65,7 @@ Descripción de las variables: ## General ### ¿Qué tipo de objeto es "peajes"? (Responda la pregunta a través de código) + ```{r peajes, exercise=TRUE, exercise.eval = FALSE} ``` @@ -75,7 +76,8 @@ Descripción de las variables: ```{r peajes-check} grade_result( - pass_if(~ identical(unlist(.result), unlist(class(peajes))), "Buenísimo!") + pass_if(~ identical(unlist(.result), unlist(class(peajes))), + "¡Genial!") ) ``` @@ -90,7 +92,8 @@ question( answer("Cada Valor debe de tener su propia celda", correct = TRUE), answer("Cada Valor debe tener varias celdas"), answer("Cada Observación debe tener su propia columna"), - incorrect = "Incorrecto.") + correct = "Correcto", + incorrect = "Incorrecto") ``` ## Acceder valores @@ -115,7 +118,8 @@ quinta fila solamente. ```{r quinta-check} grade_result( - pass_if(~ identical(unlist(.result), unlist(peajes[5,])), "¡Buenísimo!") + pass_if(~ identical(unlist(.result), unlist(peajes[5,])), + "¡Buenísimo!") ) ``` @@ -137,7 +141,7 @@ referente a aquellos peajes que se encuentran únicamente en la ruta 27. grade_result( pass_if(~ identical(unlist(.result), unlist(subset(peajes, numero_de_ruta == "27"))), - "¡Excelente!") + "¡Genial!") ) ``` diff --git a/inst/tutorials/tarea_ggplot_avanzado/tarea_ggplot_avanzado.Rmd b/inst/tutorials/tarea_ggplot_avanzado/tarea_ggplot_avanzado.Rmd index 020ee13..bcc1208 100644 --- a/inst/tutorials/tarea_ggplot_avanzado/tarea_ggplot_avanzado.Rmd +++ b/inst/tutorials/tarea_ggplot_avanzado/tarea_ggplot_avanzado.Rmd @@ -114,7 +114,6 @@ ggplot(weather, aes(x = date, y = avg_temp)) + geom_smooth(se = FALSE) ``` - ### 3. Cree un gráfico de barras donde se muestre la velocidad promedio del viento por día para cada ciudad Al variable `avg_wind` en **weather** muestra le velocidad promedio del viento diff --git a/inst/tutorials/tarea_ggplot_introduccion/tarea_ggplot_introduccion.Rmd b/inst/tutorials/tarea_ggplot_introduccion/tarea_ggplot_introduccion.Rmd index 16a1365..6897539 100644 --- a/inst/tutorials/tarea_ggplot_introduccion/tarea_ggplot_introduccion.Rmd +++ b/inst/tutorials/tarea_ggplot_introduccion/tarea_ggplot_introduccion.Rmd @@ -32,7 +32,7 @@ casas_texas <- txhousing %>% cities <- c("Austin", "Dallas", "El Paso", "Houston", "Irving", "San Antonio") -casas_texas2 <- casas_texas %>% +casas_texas <- casas_texas %>% filter(city %in% cities) ``` @@ -102,7 +102,7 @@ ggplot(casas_texas) ```{r point-solution} ggplot(casas_texas, aes(x = year, y = sales)) + -geom_point() + geom_point() ``` ### 3. Cree un gráfico que permita ver la relación entre `volume` y `sales` @@ -124,21 +124,23 @@ ggplot(casas_texas, aes(x = sales, y = volume)) + ### 4. Haga un gráfico que muestre la cantidad de listados por año para cada ciudad -Para este ejercicio utilizaremos el set de datos **casas_texas2** para que sea visualmente más entendible ya que restringe la cantidad de datos. +Para este ejercicio utilizaremos el set de datos **casas_texas** para que sea +visualmente más entendible ya que restringe la cantidad de datos. -La variable `listings` del conjunto de datos **casas_texas2** describe la -cantidad de listados activos, además, la variable `year` describe el año y la variable `city`, el nombre de la ciudad de Texas en cada caso. Utilizando estas +La variable `listings` del conjunto de datos **casas_texas** describe la +cantidad de listados activos, además, la variable `year` describe el año y la +variable `city`, el nombre de la ciudad de Texas en cada caso. Utilizando estas tres variables obtenga un gráfico que muestre la cantidad de listados por año para cada una de las ciudades. ```{r fill, exercise = TRUE} -ggplot(casas_texas2) +ggplot(casas_texas) ``` ```{r fill-solution} -ggplot(casas_texas2) + -geom_col(aes(year, listings, fill = city)) +ggplot(casas_texas, aes(x = year, y = listings, fill = city)) + + geom_col() ``` ### 5. Haga un gráfico de cajas para las 6 ciudades de **casas_texas** según su cantidad de listados activos @@ -149,11 +151,11 @@ la cantidad de listados activos. Cree un gráfico de cajas que muestre la distribución de la variable `listings` para cada una de las ciudades. ```{r box, exercise = TRUE} -ggplot(casas_texas2) +ggplot(casas_texas) ``` ```{r box-solution} -ggplot(casas_texas2) + +ggplot(casas_texas) + geom_boxplot(aes(x = city, y = listings)) ``` diff --git a/inst/tutorials/tarea_tidy_data/tarea_tidy_data.Rmd b/inst/tutorials/tarea_tidy_data/tarea_tidy_data.Rmd index 5a0dd2e..e2d764a 100644 --- a/inst/tutorials/tarea_tidy_data/tarea_tidy_data.Rmd +++ b/inst/tutorials/tarea_tidy_data/tarea_tidy_data.Rmd @@ -45,7 +45,10 @@ knitr::include_graphics( ## Datos: **vocales** -Este es un set de datos que contiene datos sobre la frecuencia del uso de las vocales en español de participantes un estudio en 1985. Contiene 750 observaciones y 4 variables. +Este es un set de datos que contiene datos sobre la frecuencia del uso de las +vocales en español de participantes un estudio en 1985. Contiene 750 +observaciones y 4 variables. + ```{r} glimpse(vocales) ``` @@ -62,7 +65,8 @@ Descripción de las variables: ### Separe la columna `label` en `participante`, `sexo` y `vocal` -La variable `label` en el conjunto de datos **vocales** está compuesta por tres elementos distintos, por ejemplo: `p01-male-a` se puede separar en `p01`, `male` +La variable `label` en el conjunto de datos **vocales** está compuesta por tres +elementos distintos, por ejemplo: `p01-male-a` se puede separar en `p01`, `male` y `a` y así obtenemos un conjunto de datos más ordenado y fácil de utilizar. Separe esta columna en tres nuevas columnas: `participante`, `sexo` y `vocal` @@ -80,13 +84,16 @@ grade_result( unlist(separate(data = vocales, col = label, into = c("participante", "sexo", "vocal"), sep = "-"))), - "Muy bien!") + "¡Genial!") ) ``` ### Una las columnas `participante`, `sexo` y `vocal` en la columna original `label` -Anteriormente separamos la columna `label` de **vocales** en tres columnas distintas, esto quedó guardado en el set de datos **separado**. Ahora una estas tres columnas de forma que volvamos a la columna `label` original pero esta vez separelo con un "_" +Anteriormente separamos la columna `label` de **vocales** en tres columnas +distintas, esto quedó guardado en el set de datos **separado**. Ahora una estas +tres columnas de forma que volvamos a la columna `label` original pero esta vez +separelo con un "_" ```{r unite, exercise = TRUE} @@ -102,14 +109,17 @@ grade_result( unlist(unite(separado, col="label", participante:vocal, sep = "_"))), - "Muy bien!") + "¡Bien hecho!") ) ``` - ### Cree un set de datos ancho, donde cada vocal tenga su propia columna -Partiendo de **separado**, vea que este es un conjunto de datos muy largo ya que se repiten mucho las observaciones por participante, ahora, utilizando las herramientas de tidyr conviertalo en un set de datos ancho donde cada vocal represente una columna. +Partiendo de **separado**, vea que este es un conjunto de datos muy largo ya +que se repiten mucho las observaciones por participante, ahora, utilizando las +herramientas de tidyr conviértalo en un set de datos ancho donde cada vocal +represente una columna. + ```{r wider, exercise = TRUE} ``` @@ -129,7 +139,7 @@ grade_result( pivot_wider(separado, names_from = vocal, values_from = f1))), - "Excelente!") + "¡Excelente!") ) ``` @@ -155,6 +165,6 @@ grade_result( pivot_wider(separado, names_from = vocal, values_from = f1))), - "Bien hecho!") + "¡Bien!") ) ``` diff --git a/inst/tutorials/tarea_tidyr/tarea_tidyr.Rmd b/inst/tutorials/tarea_tidyr/tarea_tidyr.Rmd index 9d268fd..72c9199 100644 --- a/inst/tutorials/tarea_tidyr/tarea_tidyr.Rmd +++ b/inst/tutorials/tarea_tidyr/tarea_tidyr.Rmd @@ -80,7 +80,6 @@ question("¿Cuál es el problema del conjunto de datos?", correct = "Correcto!") ``` - ### Separe la columa `id` en dos columnas distintas: `paricipante` y `numero` La columna `id` en **spirantization** identifica dos variables distintas, por @@ -100,7 +99,8 @@ grade_result( pass_if(~ identical(unlist(.result), unlist(separate(spirantization, id, into = c("participante", "numero"), - sep = "_"))), "Buenísimo!") + sep = "_"))), + "¡Buenísimo!") ) ``` @@ -127,7 +127,7 @@ grade_result( unlist(spread( separado, key = participante, value = vIntensity))), - "Excelente!") + "¡Excelente!") ) ``` @@ -153,7 +153,7 @@ grade_result( ancho, participante, value = vIntensity, adv:nat))), - "Excelente!") + "¡Genial!") ) ``` @@ -182,6 +182,6 @@ grade_result( participante, numero, sep = "/"))), - "Excelente!") + "¡Muy bien!") ) ``` From 7ab5f1768bc4a8f51479dd77e0e002de75b05aeb Mon Sep 17 00:00:00 2001 From: andreavargasmontero Date: Sun, 31 Oct 2021 18:20:46 -0600 Subject: [PATCH 27/29] Borra proyecto viejo --- ixpantia.introR.Rproj | 21 --------------------- 1 file changed, 21 deletions(-) delete mode 100644 ixpantia.introR.Rproj diff --git a/ixpantia.introR.Rproj b/ixpantia.introR.Rproj deleted file mode 100644 index d596992..0000000 --- a/ixpantia.introR.Rproj +++ /dev/null @@ -1,21 +0,0 @@ -Version: 1.0 - -RestoreWorkspace: Default -SaveWorkspace: Default -AlwaysSaveHistory: Default - -EnableCodeIndexing: Yes -UseSpacesForTab: Yes -NumSpacesForTab: 2 -Encoding: UTF-8 - -RnwWeave: Sweave -LaTeX: pdfLaTeX - -AutoAppendNewline: Yes -StripTrailingWhitespace: Yes - -BuildType: Package -PackageUseDevtools: Yes -PackageInstallArgs: --no-multiarch --with-keep.source -PackageCheckArgs: --as-cran From 70e9cd8010844a07faabb61291c73c5beb335026 Mon Sep 17 00:00:00 2001 From: andreavargasmontero Date: Sun, 31 Oct 2021 18:57:45 -0600 Subject: [PATCH 28/29] Ref #82 arregla problema css --- inst/tutorials/estilo_codigo/estilo_codigo.Rmd | 5 ++++- inst/tutorials/introduccion/introduccion.Rmd | 5 ++++- inst/tutorials/pizarra_advanced/pizarra_advanced.Rmd | 5 ++++- inst/tutorials/pizarra_coercion/pizarra_coercion.Rmd | 5 ++++- inst/tutorials/pizarra_dplyr/pizarra_dplyr.Rmd | 5 ++++- .../pizarra_ejercicios_resumir.Rmd | 5 ++++- .../pizarra_estructuras_r/pizarra_estructuras_r.Rmd | 5 ++++- .../pizarra_ggplot_avanzado/pizarra_ggplot_avanzado.Rmd | 5 ++++- .../pizarra_ggplot_introduccion.Rmd | 5 ++++- inst/tutorials/pizarra_tidy_data/pizarra_tidy_data.Rmd | 5 ++++- inst/tutorials/pizarra_tidyr/pizarra_tidyr.Rmd | 5 ++++- .../pizarra_tiempos_fechas/pizarra_tiempos_fechas.Rmd | 5 ++++- inst/tutorials/tarea_dplyr/tarea_dplyr.Rmd | 5 ++++- .../tarea_ejercicios_resumir/tarea_ejercicios_resumir.Rmd | 5 ++++- inst/tutorials/tarea_estructuras_r/tarea_estructuras_r.Rmd | 5 ++++- .../tarea_ggplot_avanzado/tarea_ggplot_avanzado.Rmd | 5 ++++- .../tarea_ggplot_introduccion/tarea_ggplot_introduccion.Rmd | 5 ++++- inst/tutorials/tarea_tidy_data/tarea_tidy_data.Rmd | 5 ++++- inst/tutorials/tarea_tidyr/tarea_tidyr.Rmd | 5 ++++- 19 files changed, 76 insertions(+), 19 deletions(-) diff --git a/inst/tutorials/estilo_codigo/estilo_codigo.Rmd b/inst/tutorials/estilo_codigo/estilo_codigo.Rmd index e2b4ac8..11a107f 100644 --- a/inst/tutorials/estilo_codigo/estilo_codigo.Rmd +++ b/inst/tutorials/estilo_codigo/estilo_codigo.Rmd @@ -3,12 +3,15 @@ title: "Sesión extra: Estilo de código" output: learnr::tutorial: language: es - css: https://storage.googleapis.com/datos_cursos/ixpantia_introR/intro_r.css runtime: shiny_prerendered description: > Ejercicios para aprender el estilo de código recomendado en ixpantia?. --- + + + + + + + + + + + + + + + + + + + + - -```{r setup, include=FALSE} -library(learnr) -knitr::opts_chunk$set(echo = FALSE) -``` - -```{r, echo=FALSE, out.width="35%", fig.align = "center"} -knitr::include_graphics( - "https://storage.googleapis.com/datos_cursos/ixpantia_introR/ixpantia_logo.png" - ) -``` - -## Introducción - -Hay muchas formas de escribir código en R. Entre mas código escribes, y -sobretodo entre mas código tienes que leer, más apreciarás un estilo uniforme. -Te permitirá leer tu propio código y volver a entenderlo más fácilmente después -de un largo tiempo sin haberlo visto. Además, un estilo uniforme te permitirá -trabajar más efectivamente con otros. - -Aquí podrás encontrar los diferentes elementos que pueden estar en un guía de -estilo. Esta basado en el guia de estilo de Hadley Wickham. Este a su vez esta -basado en el guia de estilo de Google. Además, se incluyen las sugerencias que -son relevantes para hispanohablantes. Esto porque en el Castellano estamos -acostumbrados, entre otras cosas, a tildes, eñes y otros caracteres que -necesitan su propia discusión. - -## Nomenclatura - -### Documentos - -#### Tip 1 - -Los archivos deben tener un nombre descriptivo, no tener caracteres especiales -(tildes, eñes) y terminar en .R. - -#### Ejercicio 1 - -```{r nombres_docs} -question("¿Cuál (es) de estos nombres de archivos es (son) correcto (s)?", - answer("analisis.R"), - answer("caracterización.R"), - answer("analisis_factorial.R", correct = TRUE), - answer("análisis_confirmatorio.R"), - answer("eda.R", correct = TRUE), - correct = "Correcto", - incorrect = "Incorrecto" -) -``` - -#### Tip 2 - -Si tu solución o estudio requiere que los archivos se corran en una secuencia predeterminada, añade prefijos con numerales. - -#### Ejercicio 2 - -```{r nombres_docs2} -question("¿Cuál (es) de estos nombres de archivos es (son) correcto (s)?", - answer("primer_script.R"), - answer("1_analisis_exploratorio.R", correct = TRUE), - answer("dos-modelo-predictivo.R"), - correct = "Correcto", - incorrect = "Incorrecto" -) -``` - -### Objetos - -#### Tip 3 - -Nombres de variables y de funciones deben ser en minúscula y que se ha de usar -un guión bajo (_) para separar palabras dentro de un nombre. Usar sustantivos -para los nombres de las variables y verbos para las funciones. Nunca uses -caracteres especiales como tildes y eñes en tus nombres de objetos. - -#### Ejercicio 3 -```{r nombres_objs} -question("¿Cuál (es) de estos nombres de objetos es (son) correcto (s)?", - answer("primer_cuartil", correct = TRUE), - answer("CuartilUno"), - answer("C1"), - answer("cuartil_1", correct = TRUE), - correct = "Correcto", - incorrect = "Incorrecto" -) -``` - -#### Tip 4 - -Si usas nombres de funciones que ya están en uso es probable que generes -confusión. Trata de evitarlo hasta donde sea posible. - -#### Ejercicio 4 -```{r nombres_objs2} -question("¿Cuál (es) de estos nombres de funciones es (son) correcto (s)?", - answer("F <- function(x) read.table(x)"), - answer("lee_tabla <- function(x) read.table(x)", - correct = TRUE), - answer("ls <- function(x) read.table(x)"), - correct = "Correcto", - incorrect = "Incorrecto" -) -``` - -## Sintaxis - -### Espacios - -#### Tip 5 - -Antes y después de todos los operadores infijos va un espacio (=, +, <-, etc). -Esto aplica aún para el signo equivalente (=) en las llamada de una función. No -hay espacios antes de una coma, pero una coma siempre es seguida por un espacio. - -#### Ejercicio 5 - -```{r espacios_num} -question("¿Cuál (es) de estos comandos es (son) correcto (s)?", - answer("profundidad<-round((pies + pulgadas/12), 2)"), - answer("profundidad<-round((pies+pulgadas/12), 2)"), - answer("profundidad <- round((pies+pulgadas/12), 2)"), - answer("profundidad <- round((pies + pulgadas / 12), 2)", - correct = TRUE), - correct = "Correcto", - incorrect = "Incorrecto" -) -``` - -#### Tip 6 - -No se usan espacios para `:`, `::` ni `:::`. - -#### Ejercicio 6 - -```{r espacios_dospts} -question("¿Cuál (es) de estos comandos es (son) correcto (s)?", - answer("x <- 2:23", correct = TRUE), - answer("base::round", correct = TRUE), - answer("y <- 10 : 54"), - answer("dplyr :: select()"), - correct = "Correcto", - incorrect = "Incorrecto" -) -``` - -#### Tip 7 - -Antes del paréntesis izquierdo va un espacio, a no ser que estés llamando una -función en cual caso no se usa un espacio. - -#### Ejercicio 7 - -```{r espacios_izq} -question("¿Cuál (es) de estos comandos es (son) correcto (s)?", - answer("qplot(x, y)", correct = TRUE), - answer("plot (x, y)"), - answer("if (debug) do(x)", correct = TRUE), - answer("if(condicion)function(x)"), - correct = "Correcto", - incorrect = "Incorrecto" -) -``` - -#### Tip 8 - -Cuando quieras introducir mas orden en el código alineándolo, por ejemplo, -sobre los símbolos de igualdad, está bien usar espacios para tal efecto - -#### Tip 9 - -Los paréntesis y corchetes ([]) no llevan espacios a su alrededor. Si hay una -coma, aplican las convenciones que se mencionaron antes. - -#### Ejercicio 9 - -```{r parent} -question("¿Cuál (es) de estos comandos es (son) correcto (s)?", - answer("if ( depurando ) x <- 34"), - answer("if (depurando) x <- 34", correct = TRUE), - answer("resultados[1,]"), - answer("resultados[1 ,]"), - answer("resultados[5, 1]", correct = TRUE), - correct = "Correcto", - incorrect = "Incorrecto" -) -``` - -### Punto y coma - -#### Tip 10 - -No uses punto y coma dentro del código. No es necesario, y prácticamente ya no -se usa. - - -### Llaves - -#### Tip 11 - -Abrir una llave nunca debería ocurrir en su propia línea y siempre se sigue con -una línea nueva. Una llave que cierra siempre debe ir en su propia línea a menos -que sea else. Siempre usa llaves cuando estás usando construcciones con “if”, -aún cuando no es posible no hacerlo. - -### Longitud de lineas - -#### Tip 12 - -Trata de limitar tu código a una longitud de 80 caracteres por linea. Esto cabe -cómodamente en una página impresa a un tamaño de la fuente razonable. - -### Asignación - -#### Tip 13 - -Es mejor usar solo `<-` para asignación en vez de `=` y usar el símbolo de -igualdad solamente para argumentos dentro de funciones. - -#### Ejercicio 13 -```{r asigna} -question("¿Cuál (es) de estos comandos es (son) correcto (s)?", - answer("y <- 23", correct = TRUE) , - answer("y = 23"), - correct = "Correcto", - incorrect = "Incorrecto" -) -```