如何在lapply中传入两组索引提取指定回归结果?
解决方案
你的问题核心是需要针对不同位置的回归结果,使用不同的索引提取,而lapply只能对单一对象迭代,无法同时传递两组配对的参数(回归结果列表+对应提取索引),所以需要用支持多输入配对迭代的函数来解决。
步骤1:定义提取规则索引
先创建一个和regressionList长度一致的索引向量,对应每个因变量要提取的回归类型:
# 第1、3个因变量取线性回归(索引2),第2个取泊松回归(索引3) extract_indices <- c(2, 3, 2)
步骤2:用mapply配对提取
mapply可以接受多个等长的迭代对象,将regressionList和extract_indices逐个配对处理:
# 提取目标模型,SIMPLIFY=FALSE确保返回列表格式 selected_models <- mapply(function(reg_result, idx) reg_result[[idx]], regressionList, extract_indices, SIMPLIFY = FALSE) # 给结果命名,方便识别对应哪个因变量 names(selected_models) <- c("Sepal.Length", "Sepal.Width", "Petal.Length")
替代方案:用purrr::map2(更简洁)
如果你习惯用tidyverse工具链,purrr包的map2函数专门处理双输入的迭代:
library(purrr) selected_models <- map2(regressionList, extract_indices, ~ .x[[.y]]) names(selected_models) <- c("Sepal.Length", "Sepal.Width", "Petal.Length")
为什么之前的lapply写法失效?
lapply仅能对单个向量/列表进行迭代,无法同时传递“回归结果”和“对应提取索引”这两组配对参数。而mapply/map2支持多输入的配对迭代,刚好匹配你的需求。
内容的提问来源于stack exchange,提问作者llewmills
相关产品推荐
相关产品推荐

