R语言使用combn()生成无重复组合并实现代码泛化的方法
R 列表元素全组合生成实现方案
你原有代码的问题在于combn默认返回矩阵结构,且命名逻辑错误,才会出现所有同长度组合被打包在同一个元素里的问题。以下是泛用性实现代码,可适配任意长度的输入列表:
result <- lapply(mydata, function(current_vec) { # 初始化当前向量的组合结果列表 vec_output <- list() vec_len <- length(current_vec) # 遍历所有组合长度 for (comb_len in 1:vec_len) { # 生成指定长度的所有组合,simplify = F直接返回拆分后的列表 comb_list <- combn(current_vec, comb_len, simplify = FALSE) # 按要求给每个组合命名:c_组合长度_组合序号 names(comb_list) <- paste0("c_", comb_len, "_", seq_along(comb_list)) # 合并到当前向量的总结果中 vec_output <- c(vec_output, comb_list) } return(vec_output) })
你可以直接测试输出验证:
# 验证myvector_a的组合命名 names(result$myvector_a) # 查看对应元素值 result$myvector_a$c_2_1
该代码不需要手动指定循环边界,不管输入的mydata包含多少个向量、每个向量的长度是多少,都可以自动生成符合要求格式的结果。如果你需要限制组合的最大长度,只需要修改for循环的上限即可。
内容的提问来源于stack exchange,提问作者cnauber
相关产品推荐
相关产品推荐

