有什么快速可扩展的方法可以将整数1到N转换为相应长度的字符串序列"A","B",..."Z","AA","AB"等?
或者,我希望有一种方法可以将整数向量映射到字符向量,使得字符向量的每个元素具有相同的字符数。例如:1、2、...27 => "AA","AB",...,"AZ","BA"
示例输入:
num_vec <- seq(1, 1000)
char_vec <- ???
更新
我的临时措施,但是效果最好:
library(data.table)
myfunc <- function(n){
if(n <= 26){
dt <- CJ(LETTERS)[, Result := paste0(V1)]
} else if(n <= 26^2){
dt <- CJ(LETTERS, LETTERS)[, Result := paste0(V1, V2)]
} else if(n <= 26^3){
dt <- CJ(LETTERS, LETTERS, LETTERS)[, Result := paste0(V1, V2, V3)]
} else if(n <= 26^4){
dt <- CJ(LETTERS, LETTERS, LETTERS, LETTERS)[, Result := paste0(V1, V2, V3, V4)]
} else if(n <= 26^5){
dt <- CJ(LETTERS, LETTERS, LETTERS, LETTERS, LETTERS)[, Result := paste0(V1, V2, V3, V4, V5)]
} else if(n <= 26^6){
dt <- CJ(LETTERS, LETTERS, LETTERS, LETTERS, LETTERS, LETTERS)[, Result := paste0(V1, V2, V3, V4, V5, V6)]
} else{
stop("n too large")
}
return(dt$Result[1:n])
}
myfunc(10)
sz = ceiling(log(n)/log(26)); do.call(CJ, replicate(sz, LETTERS, simplify = F))[, Reduce(paste0, .SD)][1:n]
- eddi