You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用purrr递归应用带可变参数的函数实现迭代组合计算?

用purrr实现嵌套组合的迭代计算

要实现从初始x=N、m=N开始,每次以上一步结果作为新的x,m递减1直到m=2的嵌套组合计算,我们可以用purrr::accumulate配合utils::combn完成,无需手动逐层编写map调用。

核心实现代码

library(purrr)

# 设置基础参数
x <- 4
start_m <- 4
end_m <- 2

# 生成迭代所需的m值序列(从start_m-1递减到end_m)
m_steps <- seq(start_m - 1, end_m, by = -1)

# 迭代生成嵌套组合列表
result_list <- accumulate(
  .x = m_steps,
  .f = function(current_list, m) {
    map(current_list, ~ combn(.x, m, simplify = FALSE))
  },
  .init = combn(x, start_m, simplify = FALSE)
)

代码说明

  • .init参数指定初始计算结果:即combn(x, start_m, simplify = FALSE),对应手动实现的n1;
  • m_steps定义后续迭代的m值(示例中为3,2);
  • accumulate会自动将上一轮的计算结果和当前m值传入处理函数,通过map对列表中每个元素调用combn生成下一层级的组合;
  • 最终result_list包含所有层级的结果:result_list[[1]]对应n1,result_list[[2]]对应n2,result_list[[3]]对应手动实现的n3。

封装复用函数

如果需要多次调用,可以封装成函数:

generate_nested_combs <- function(x, start_m, end_m = 2) {
  # 参数合法性检查
  stopifnot(start_m >= end_m, end_m >= 2)
  m_steps <- seq(start_m - 1, end_m, by = -1)
  accumulate(
    m_steps,
    ~ map(.x, combn, m = .y, simplify = FALSE),
    .init = combn(x, start_m, simplify = FALSE)
  )
}

# 调用示例:获取x=4、从m=4到m=2的所有层级结果
all_levels <- generate_nested_combs(4, 4)
# 提取最深层级的组合结果
deepest_level <- all_levels[[length(all_levels)]]

内容的提问来源于stack exchange,提问作者filemonPi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 08:56:07