Redactar una lista de palabras separadas por comas en R

30/3/2025

Temas: consejos, texto,

Cuando obtenemos una lista de palabras que obtuvimos desde nuestros datos, y queremos incluirlas en algún reporte —ya sea como el título de un gráfico, el subtítulo de un capítulo, o un texto dinámico basado en los datos— vamos a querer que estén redactadas correctamente: separadas por comas. La función paste() sirve para unir distintos objetos de tipo texto.

paste("primera", "segunda")
[1] "primera segunda"

Si queremos unir las dos palabras, podemos especificar un separador:

paste("primera", "segunda", sep = ", ") # unir palabras, separadas por comas
[1] "primera, segunda"

Pero si las palabras las estamos extrayendo desde los datos, lo más probable es que vengan dentro de un vector de texto, como el siguiente:

palabras <- c("verde", "azul", "morado", "fuscia")

Entonces, la unión entre los elementos de un vector se realiza con el argumento collapse de paste():

paste(palabras, collapse = ", ")
[1] "verde, azul, morado, fuscia"

Con esto obtenemos un vector de texto de largo 1, que contiene los elementos del vector anterior, pero unidos, separados por una coma. Pero podemos mejorar este resultado si escribimos un poco más de código para que la redacción de los elementos sea más apropiada: separando el último elemento por la palabra y. Primero obtendremos el largo del vector de palabras length(). Luego usaremos este largo para seleccionar las palabras desde la primera a la penúltima.

largo <- length(palabras)
palabras_a <- palabras[1:largo-1]
print(palabras_a) # todas las palabras menos la última
[1] "verde"  "azul"   "morado"

Volvemos a usar el largo para extraer solamente la última palabra:

palabras_b <- palabras[largo]
print(palabras_b) # la última palabra
[1] "fuscia"

Unimos el vector de las primeras palabras, separándolas con comas:

# unir las primeras palabras separadas por comas
palabras_a2 <- paste(palabras_a, collapse = ", ")

Ahora que tenemos dos objetos, uno con las primeras palabras separadas por comas, y otro con la última palabra, unimos ambos objetos, separándolos con la palabra y:

# agregar la última palabra separada por "y"
palabras_redactadas <- paste(palabras_a2, palabras_b, sep = " y ")
print(palabras_redactadas)
[1] "verde, azul, morado y fuscia"

Cómo resultado, obtenemos un código que genera la redacción de cualquier cantidad de palabras que vengan en un vector de texto. Podemos formalizar este invento creando una función que simplifique esta tarea:

redactar_palabras <- function(palabras) {
  largo <- length(palabras)
  palabras_a <- palabras[1:largo-1] # primeras palabras
  palabras_b <- palabras[largo] #última palabra
  
  # unir las primeras palabras separadas por comas
  palabras_a2 <- paste(palabras_a, collapse = ", ")
  
  # agregar la última palabra separada por "y"
  palabras_redactadas <- paste(palabras_a2, palabras_b, sep = " y ")
  
  # retornar palabras redactadas
  return(palabras_redactadas)
}

Gracias a esta función, ahora podemos lograr la redacción de las palabras de forma mucho más fácil y clara:

redactar_palabras(palabras)
[1] "verde, azul, morado y fuscia"

Dicho lo anterior, y gracias a lo extenso que es el ecosistema de R, quizás resulta más rápido usar una función que hace exactamente lo mismo y que viene en {glue}, un paquete del Tidyverse:

library(glue)
glue::glue_collapse(palabras, 
                    sep = ", ", 
                    last = " y ")
verde, azul, morado y fuscia

A veces nos podemos reinventar la rueda cuando ya existen soluciones 😣 Pero esto no es tiempo perdido si es que nos permite aprender cosas nuevas y/o poner en práctica nuestras habilidades 🥰

Fecha de publicación:
March 30, 2025
Extensión:
3 minute read, 536 words
Tags:
consejos texto
Ver también:
Reduce el tamaño de tus reportes Quarto con este truco
Sugerencias y autocompletado de código con GitHub Copilot
Limpieza y recodificación de datos de texto en R con {stringr}