cantar <- function(){
print("Me gustas tú")
}Introducción
Algún día quiero poder enseñar ciencia de datos en español, pero mi español no es muy bueno. Quiero practicar con esta publicación de blog. Gracias a Yanina Bellini Saibene por su ayuda con la corrección de mi español y a todas las personas que hicieron la traducción R para Ciencia de Datos. Aprendí mucho español para R con este libro.
Aprenderemos a cantar “Me Gustas Tú” de Manu Chao en R. Si no conoces la canción, por favor escúchala o lee la letra de «Me Gustas Tú».
Funciones
A Manu Chao le gusta todo y le gustas tú. Cantamos como Manu Chao pero escribimos nuestra letra para respetar los derechos de autor.
Me gusta el español, me gustas tú.
Me gusta enseñar, me gustas tú.
Me gusta California, me gustas tú.
En la canción hay 27 cosas que le gustan pero el patrón siempre es el mismo: Me gusta “algo”, me gustas tú. Primero escribimos una funcion para cantar me gustas tú por que es más fácil.
Esta función imprimirá Me gustas tú. Por ejemplo:
cantar()[1] "Me gustas t<U+00FA>"
queremos que le guste “algo” y tú. Necesitamos un argumento “algo”.
cantar <- function(algo){
print(paste0("Me gusta ", algo, ",", " me gustas tú."))
}Aquí paste0 combina todas las palabras juntas. La palabra “algo” no tiene comillas porque es una palabra especial, es un argumento de la función. Ahora nos puede gustar alguna cosa. Por ejemplo:
cantar("el cine")[1] "Me gusta el cine, me gustas t<U+00FA>."
o
cantar("la mar")[1] "Me gusta la mar, me gustas t<U+00FA>."
Iteración
Escribo 10 cosas que a mi me gustan y sobre las que quiero que cantemos.
mis_favoritos <- c("español", "ensenar", "California",
"el cine", "la mar", "comer", "aprender",
"mi madre", "el feminismo", "R")No quiero escribir la función 10 veces. Antes de la iteración, hablemos de índices. La primera cosa en mis_favoritos es "español", la séptima cosa es "aprender".
mis_favoritos[1][1] "espa<U+00F1>ol"
mis_favoritos[7][1] "aprender"
Queremos usar la función cantar() para todos elementos en mis_favoritos.
Pedemos escribir:
purrr::map(mis_favoritos, cantar)[1] "Me gusta espa<U+00F1>ol, me gustas t<U+00FA>."
[1] "Me gusta ensenar, me gustas t<U+00FA>."
[1] "Me gusta California, me gustas t<U+00FA>."
[1] "Me gusta el cine, me gustas t<U+00FA>."
[1] "Me gusta la mar, me gustas t<U+00FA>."
[1] "Me gusta comer, me gustas t<U+00FA>."
[1] "Me gusta aprender, me gustas t<U+00FA>."
[1] "Me gusta mi madre, me gustas t<U+00FA>."
[1] "Me gusta el feminismo, me gustas t<U+00FA>."
[1] "Me gusta R, me gustas t<U+00FA>."
[[1]]
[1] "Me gusta espa<U+00F1>ol, me gustas t<U+00FA>."
[[2]]
[1] "Me gusta ensenar, me gustas t<U+00FA>."
[[3]]
[1] "Me gusta California, me gustas t<U+00FA>."
[[4]]
[1] "Me gusta el cine, me gustas t<U+00FA>."
[[5]]
[1] "Me gusta la mar, me gustas t<U+00FA>."
[[6]]
[1] "Me gusta comer, me gustas t<U+00FA>."
[[7]]
[1] "Me gusta aprender, me gustas t<U+00FA>."
[[8]]
[1] "Me gusta mi madre, me gustas t<U+00FA>."
[[9]]
[1] "Me gusta el feminismo, me gustas t<U+00FA>."
[[10]]
[1] "Me gusta R, me gustas t<U+00FA>."
Condiciones
cantar("las estadísticas")[1] "Me gusta las estad<U+00ED>sticas, me gustas t<U+00FA>."
Houston, tenemos un problema. Mi español es malo, pero no tan malo. Sé que se dice “Me gustan las estadísticas, me gustas tú”. Si “algo” es plural (empieza con las o los), entonces debe decir “gustan”. Necesitamos cambiar nuestra función pero primero necesitamos verificar si algo comienza con “las” con la función str_detect() en paquete stringr.
stringr::str_detect("las estadísticas", "^las ")[1] TRUE
También podemos verificar si algo comienza con “las” en mis_favoritos.
stringr::str_detect(mis_favoritos, "^las ") [1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
Cambiamos nuestra función
cantar <- function(algo){
if(stringr::str_detect(algo, "^las ") == TRUE){
print(paste0("Me gustan ", algo, ",", " me gustas tú."))
}else{
print(paste0("Me gusta ", algo, ",", " me gustas tú."))
}
}Verificamos:
cantar("las estadísticas")[1] "Me gustan las estad<U+00ED>sticas, me gustas t<U+00FA>."
¡Excelente!
cantar("los gatos")[1] "Me gusta los gatos, me gustas t<U+00FA>."
Ups, nos olvidamos pensar en “los”. Agreguemos eso.
cantar <- function(algo){
if(stringr::str_detect(algo, "^las ") == TRUE |
stringr::str_detect(algo, "^los ") == TRUE){
print(paste0("Me gustan ", algo, ",", " me gustas tú."))
}else{
print(paste0("Me gusta ", algo, ",", " me gustas tú."))
}
}Verificamos nuevamente:
cantar("los gatos")[1] "Me gustan los gatos, me gustas t<U+00FA>."
Ahora tengo una lista más larga de cosas que me gustan y que podemos cantar.
mis_favoritos <- c("el español", "ensenar", "California",
"el cine", "la mar", "comer", "aprender",
"mi madre", "el feminismo", "R",
"las estadísticas", "los gatos", "las artes",
"las R-Ladies", "los libros")Ahora podemos cantar como Manu Chao en R.
purrr::map(mis_favoritos, cantar)[1] "Me gusta el espa<U+00F1>ol, me gustas t<U+00FA>."
[1] "Me gusta ensenar, me gustas t<U+00FA>."
[1] "Me gusta California, me gustas t<U+00FA>."
[1] "Me gusta el cine, me gustas t<U+00FA>."
[1] "Me gusta la mar, me gustas t<U+00FA>."
[1] "Me gusta comer, me gustas t<U+00FA>."
[1] "Me gusta aprender, me gustas t<U+00FA>."
[1] "Me gusta mi madre, me gustas t<U+00FA>."
[1] "Me gusta el feminismo, me gustas t<U+00FA>."
[1] "Me gusta R, me gustas t<U+00FA>."
[1] "Me gustan las estad<U+00ED>sticas, me gustas t<U+00FA>."
[1] "Me gustan los gatos, me gustas t<U+00FA>."
[1] "Me gustan las artes, me gustas t<U+00FA>."
[1] "Me gustan las R-Ladies, me gustas t<U+00FA>."
[1] "Me gustan los libros, me gustas t<U+00FA>."
[[1]]
[1] "Me gusta el espa<U+00F1>ol, me gustas t<U+00FA>."
[[2]]
[1] "Me gusta ensenar, me gustas t<U+00FA>."
[[3]]
[1] "Me gusta California, me gustas t<U+00FA>."
[[4]]
[1] "Me gusta el cine, me gustas t<U+00FA>."
[[5]]
[1] "Me gusta la mar, me gustas t<U+00FA>."
[[6]]
[1] "Me gusta comer, me gustas t<U+00FA>."
[[7]]
[1] "Me gusta aprender, me gustas t<U+00FA>."
[[8]]
[1] "Me gusta mi madre, me gustas t<U+00FA>."
[[9]]
[1] "Me gusta el feminismo, me gustas t<U+00FA>."
[[10]]
[1] "Me gusta R, me gustas t<U+00FA>."
[[11]]
[1] "Me gustan las estad<U+00ED>sticas, me gustas t<U+00FA>."
[[12]]
[1] "Me gustan los gatos, me gustas t<U+00FA>."
[[13]]
[1] "Me gustan las artes, me gustas t<U+00FA>."
[[14]]
[1] "Me gustan las R-Ladies, me gustas t<U+00FA>."
[[15]]
[1] "Me gustan los libros, me gustas t<U+00FA>."
¡Perfecto!