Jak mogę skutecznie sortować znaki każdego łańcucha w wektorze? Na przykład, biorąc pod uwagę wektor ciągów:
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)))
Napisałem funkcję, która podzieli każdy ciąg na wektor, posortuje wektor, a następnie zwinie dane wyjściowe:
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)
Jednak wektor ciągów, do którego muszę to zastosować, jest bardzo długi, a ta funkcja jest zbyt wolna. Czy ktoś ma jakieś sugestie dotyczące poprawy wydajności?
letters
Nie zawsze są trzy długości jak w przykładzie, są?
fixed = TRUE
w strsplit()
może poprawić wydajność, ponieważ nie będzie wiązać się z użyciem regex.