Redactar palabras en plural en R

21/10/2025

texto

Cuando desarrollamos reportes, gráficos o aplicaciones en R, necesitamos hacer que nuestros textos se adapten a los datos que estamos analizando.

Si tenemos que poner texto sobre una cantidad de elementos, tenemos que escribir en singular o plural dependiendo de la cantidad (1 gato, 2 gatos).

Por ejemplo, si tenemos un objeto cantidad que contiene el número de gatos, y queremos escribir un texto que diga “gato” o “gatos” dependiendo de la cantidad, podemos usar la función ifelse():

cantidad <- 12

singular <- "gato"
plural <- "gatos"

texto <- ifelse(cantidad == 1,
                yes = singular,
                no = plural)

texto
[1] "gatos"

Para evitar repetir el código cada vez que necesitemos escribir en singular o plural, creamos una función llamada plural(), que recibe como argumentos la cantidad n, y luego el texto en singular y en plural, y dependiendo de la cantidad se retornará el texto apropiado:

plural <- function(n, singular, plural) {
  
  ifelse(n == 1,
         singular,
         plural)
}
plural(1, "gato", "gatos")
[1] "gato"
plural(3, "gato", "gatos")
[1] "gatos"

Podemos mejorar esta función agregando una validación para chequear que la cantidad sea realmente un número, y podemos mejorar el ifelse() haciendo que el argumento plural sea opcional, y si no se entrega, la función agregue una “s” al final del texto en singular para formar el plural.

plural <- function(n, singular, plural = NULL) {
  
  # validación
  if (!is.numeric(n)) stop("se requiere un valor numérico")
  
  # si la cantidad es 1, singular
  ifelse(n == 1,
         singular,
         # si la cantidad es mayor a 1
         ifelse(
           # pero no se definió el plural, agregar "s"
           is.null(plural),
           paste0(singular, "s"),
           # de lo contrario, usar el plural
           plural)
  )
}

plural(3, "gato")
[1] "gatos"
plural(1, "gato")
[1] "gato"

El uso de esta función sería más o menos algo así:

n <- 23
paste("Existe un total de", n, plural(n, "gato"), "en la vivienda.")
[1] "Existe un total de 23 gatos en la vivienda."

Para adecuarnos a la posibilidad de que la cantidad sea cero, creamos una nueva función que use la función anterior plural() si la cifra es igual o mayor a 1, o si no, retorna un texto distinto.

n <- 4

cantidad <- function(n, singular) {
  # si la cantidad es missing o cero
  ifelse(is.na(n) | n == 0,
         # anteponer "ningún" a la cifra
         paste("ningún", singular),
         # si la cantidad es 1 o más, usar la función plural
         # anteponiento la cifra
         paste(n, plural(n, singular))
  )
}

Probemos distintos casos:

n <- 6
cantidad(n, "gato")
[1] "6 gatos"
n <- 1
cantidad(n, "gato")
[1] "1 gato"
n <- NA
cantidad(n, "gato")
[1] "ningún gato"

Todo lo anterior fue una excusa para ✨aprender✨, porque existe una mejor opción: usar la función pluralize() del paquete {cli}, que soluciona el problema (a cambio de tener que cargar un paquete más).

library(cli)

cantidad <- 3
pluralize("Total de {cantidad} gato{?s}.")
Total de 3 gatos.
cantidad <- 1
pluralize("Total de {cantidad} gato{?s}.")
Total de 1 gato.
Fecha de publicación:
October 21, 2025
Extensión:
3 minute read, 487 words
Tags:
texto
Ver también:
Extracción de datos estructurados desde texto usando IA
Renombrar archivos desde R
Redactar textos basados en datos usando IA desde R