¿Cómo puedo ordenar eficientemente los caracteres de cada cadena en un vector? Por ejemplo, dado un vector de cadenas:
set.seed(1)
strings <- c(do.call(paste0, replicate(4, sample(LETTERS, 10000, TRUE), FALSE)),
do.call(paste0, replicate(3, sample(LETTERS, 10000, TRUE), FALSE)),
do.call(paste0, replicate(2, sample(LETTERS, 10000, TRUE), FALSE)))
He escrito una función que dividirá cada cadena en un vector, clasificará el vector y luego colapsará la salida:
sort_cat <- function(strings){
tmp <- strsplit(strings, split="")
tmp <- lapply(tmp, sort)
tmp <- lapply(tmp, paste0, collapse = "")
tmp <- unlist(tmp)
return(tmp)
}
sorted_strings <- sort_cat(strings)
Sin embargo, el vector de cadenas al que necesito aplicar esto es muy largo y esta función es demasiado lenta. ¿Alguien tiene alguna sugerencia sobre cómo mejorar el rendimiento?
letters
no siempre son de la longitud de tres como en su ejemplo, ¿verdad?
fixed = TRUE
de strsplit()
puede mejorar el rendimiento, ya que no implica el uso de expresiones regulares.