Cantamos como Manu Chao en R

Manu Chao, funciones y iteración.

R
teaching
espanol
Author
Published

July 29, 2020

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.

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.

cantar <- function(){
  print("Me gustas tú")
}

Esta función imprimirá Me gustas tú. Por ejemplo:

cantar()
[1] "Me gustas tú"

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ú."

o

cantar("la mar")
[1] "Me gusta la mar, me gustas tú."

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ñ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ñol, me gustas tú."
[1] "Me gusta ensenar, me gustas tú."
[1] "Me gusta California, me gustas tú."
[1] "Me gusta el cine, me gustas tú."
[1] "Me gusta la mar, me gustas tú."
[1] "Me gusta comer, me gustas tú."
[1] "Me gusta aprender, me gustas tú."
[1] "Me gusta mi madre, me gustas tú."
[1] "Me gusta el feminismo, me gustas tú."
[1] "Me gusta R, me gustas tú."
[[1]]
[1] "Me gusta español, me gustas tú."

[[2]]
[1] "Me gusta ensenar, me gustas tú."

[[3]]
[1] "Me gusta California, me gustas tú."

[[4]]
[1] "Me gusta el cine, me gustas tú."

[[5]]
[1] "Me gusta la mar, me gustas tú."

[[6]]
[1] "Me gusta comer, me gustas tú."

[[7]]
[1] "Me gusta aprender, me gustas tú."

[[8]]
[1] "Me gusta mi madre, me gustas tú."

[[9]]
[1] "Me gusta el feminismo, me gustas tú."

[[10]]
[1] "Me gusta R, me gustas tú."

Condiciones

cantar("las estadísticas")
[1] "Me gusta las estadísticas, me gustas tú."

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ísticas, me gustas tú."

¡Excelente!

cantar("los gatos")
[1] "Me gusta los gatos, me gustas tú."

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ú."

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ñol, me gustas tú."
[1] "Me gusta ensenar, me gustas tú."
[1] "Me gusta California, me gustas tú."
[1] "Me gusta el cine, me gustas tú."
[1] "Me gusta la mar, me gustas tú."
[1] "Me gusta comer, me gustas tú."
[1] "Me gusta aprender, me gustas tú."
[1] "Me gusta mi madre, me gustas tú."
[1] "Me gusta el feminismo, me gustas tú."
[1] "Me gusta R, me gustas tú."
[1] "Me gustan las estadísticas, me gustas tú."
[1] "Me gustan los gatos, me gustas tú."
[1] "Me gustan las artes, me gustas tú."
[1] "Me gustan las R-Ladies, me gustas tú."
[1] "Me gustan los libros, me gustas tú."
[[1]]
[1] "Me gusta el español, me gustas tú."

[[2]]
[1] "Me gusta ensenar, me gustas tú."

[[3]]
[1] "Me gusta California, me gustas tú."

[[4]]
[1] "Me gusta el cine, me gustas tú."

[[5]]
[1] "Me gusta la mar, me gustas tú."

[[6]]
[1] "Me gusta comer, me gustas tú."

[[7]]
[1] "Me gusta aprender, me gustas tú."

[[8]]
[1] "Me gusta mi madre, me gustas tú."

[[9]]
[1] "Me gusta el feminismo, me gustas tú."

[[10]]
[1] "Me gusta R, me gustas tú."

[[11]]
[1] "Me gustan las estadísticas, me gustas tú."

[[12]]
[1] "Me gustan los gatos, me gustas tú."

[[13]]
[1] "Me gustan las artes, me gustas tú."

[[14]]
[1] "Me gustan las R-Ladies, me gustas tú."

[[15]]
[1] "Me gustan los libros, me gustas tú."

¡Perfecto!

No matching items