R语言遍历多个嵌套列表生成所有组合的实现方法咨询
你可以通过生成多列表索引的笛卡尔积批量构造目标对象,无需手动嵌套循环,天然适配各列表长度动态变化的场景,完整实现如下:
在你现有代码的基础上追加以下代码即可得到所有组合结果:
# 生成所有索引的唯一组合,列表长度变更时自动适配 index_grid <- expand.grid( eval_idx = seq_along(evaluation), cont_idx = seq_along(cont), con_idx = seq_along(con), stringsAsFactors = FALSE ) # 初始化存储所有content的结果列表 all_content <- vector("list", nrow(index_grid)) # 批量生成所有符合结构的content对象 for (i in seq_len(nrow(index_grid))) { all_content[[i]] <- list( Eval = evaluation[index_grid$eval_idx[i]], cont = cont[index_grid$cont_idx[i]], con = con[index_grid$con_idx[i]], scenario = sce ) }
代码说明
- 最终生成的
all_content列表包含所有唯一组合,总长度为各输入列表长度的乘积,完全覆盖所有排列可能 - 需要调用某一个组合时,直接通过
all_content[[组合序号]]提取即可 - 后续如果新增列表维度,只需要在
expand.grid里补充对应索引参数,再在content构造逻辑里加对应字段即可
补充优化
你现有代码中Dates的生成逻辑存在格式隐患,可替换为以下写法避免后续取值异常:
# 修正后的Dates生成逻辑 Dates <- list(format_iso_8601(format(Sys.time()))) for (i in 0:Days){ tmp <- format_iso_8601(format(Sys.Date() - i)) Dates <- c(Dates, list(tmp)) }
内容的提问来源于stack exchange,提问作者FIshcode
相关产品推荐
相关产品推荐

