【发布时间】:2020-02-05 19:55:50
【问题描述】:
如何有效地对向量中每个字符串的字符进行排序?例如,给定一个字符串向量:
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)))
我写了一个函数,它将每个字符串拆分成一个向量,对向量进行排序,然后折叠输出:
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)
但是,我需要应用它的字符串向量很长,而且这个函数太慢了。有人对如何提高性能有任何建议吗?
【问题讨论】:
-
查看 stringi 包 - 它提供了相对于基础的加速。 Rich Scriven 的回答提供了更多细节:stackoverflow.com/questions/5904797/…
-
letters并不总是像您的示例中那样长度为 3,是吗? -
不,字符串的长度可能会有所不同。
-
我认为在
strsplit()中添加fixed = TRUE可能会提高性能,因为它不涉及使用正则表达式。
标签: r string performance sorting