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

R语言tidyverse中如何对两个列表所有元素组合应用函数

map2的逻辑是按向量位置一一配对调用函数,当你传入长度都为2的.x = c(0,1)和.y = c(1,2)时,它只会生成(0,1)、(1,2)两组组合调用,自然只能得到2个结果,无法覆盖全部4种笛卡尔积组合。

解决方案1:使用cross2生成全组合后映射

直接调用purrr内置的cross2生成两个向量的所有元素组合,再用map批量执行函数即可:

library(tidyverse)

# 生成mean和sd的全组合列表
param_combinations <- cross2(.x = c(0, 1), .y = c(1, 2))

# 对每个组合执行qnorm计算
full_result <- map(param_combinations, ~ qnorm(p = 0.05, mean = .x[[1]], sd = .x[[2]], lower.tail = FALSE))

输出的full_result就是你需要的4组结果:

[[1]]
[1] 1.644854

[[2]]
[1] 2.644854

[[3]]
[1] 3.289707

[[4]]
[1] 4.289707

解决方案2:参数表+逐行映射(更易溯源)

如果需要清晰对应每组结果的输入参数,可以先构造全组合参数数据框,再用pmap逐行计算,结果可直接存入数据框:

library(tidyverse)

# 构造全组合参数表
param_df <- expand_grid(
  mean = c(0, 1),
  sd = c(1, 2)
)

# 逐行计算并把结果写入新列
param_df <- param_df %>%
  mutate(qnorm_res = pmap_dbl(., ~ qnorm(p = 0.05, mean = ..1, sd = ..2, lower.tail = FALSE)))

最终得到的带结果的参数表如下:

# A tibble: 4 × 3
   mean    sd qnorm_res
  <dbl> <dbl>     <dbl>
1     0     1      1.64
2     0     2      3.29
3     1     1      2.64
4     1     2      4.29

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 09:06:03