Comment puis-je trier efficacement les caractères de chaque chaîne d'un vecteur? Par exemple, étant donné un vecteur de chaînes:
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)))
J'ai écrit une fonction qui divisera chaque chaîne en un vecteur, triera le vecteur, puis réduira la sortie:
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)
Cependant, le vecteur de chaînes auquel je dois l'appliquer est très long et cette fonction est trop lente. Quelqu'un a-t-il des suggestions pour améliorer les performances?
letters
ne sont pas toujours de longueur trois comme dans votre exemple, n'est-ce pas?
fixed = TRUE
dans strsplit()
peut améliorer les performances car il ne comportera pas l'utilisation de regex.