R编程中如何实现n次嵌套循环生成字符的全部4^n种组合
R语言生成指定长度的ABCD全组合函数实现
方法1:基于内置函数的简洁实现
直接调用R自带的expand.grid生成全排列网格,再拼接为字符串,代码量少且执行效率高,输出顺序和你给出的嵌套循环结果完全一致:
generate_comb <- function(n) { char_vec <- c("A", "B", "C", "D") comb_grid <- expand.grid(rep(list(char_vec), n), stringsAsFactors = FALSE) apply(comb_grid, 1, paste0, collapse = "") }
调用方式:传入参数n即可得到对应长度的所有组合
# 生成长度为2的组合 generate_comb(2) # 生成长度为3的组合 generate_comb(3)
方法2:纯循环迭代实现
如果你需要完全用循环逻辑实现、不依赖内置排列函数,可以用迭代的方式避免写可变层数的嵌套循环:
generate_comb_loop <- function(n) { char_vec <- c("A", "B", "C", "D") comb <- char_vec # 迭代n-1次,每次给现有组合拼接一层字符 for (step in 2:n) { temp_res <- c() idx <- 1 for (prev_str in comb) { for (c in char_vec) { temp_res[idx] <- paste0(prev_str, c) idx <- idx + 1 } } comb <- temp_res } return(comb) }
调用方式和方法1完全相同,输出结果也一致。
内容的提问来源于stack exchange,提问作者John peter
相关产品推荐
相关产品推荐

