R语言:提取符合条件的SUM值与矩阵型结果到新数据框
R语言tidyverse+pmap结果提取方案
1. 基础代码准备
先构造参数网格和自定义函数,模拟业务场景:
library(tidyverse) # 创建包含所有参数组合的网格 param_grid <- expand_grid( Aparam = c(1, 1, 2, 2), Bparam = c(10, 20) ) # 自定义返回列表的函数(包含SUM、乘积、矩阵) my_function <- function(Aparam, Bparam) { sum_val <- Aparam + Bparam prod_val <- Aparam * Bparam mat_val <- matrix(c(Aparam, Bparam, Bparam, Aparam), nrow = 2) list(SUM = sum_val, PRODUCT = prod_val, MATRIX = mat_val) } # 用pmap批量执行函数,结果并入参数网格 param_grid <- param_grid %>% mutate(result = pmap(list(Aparam, Bparam), my_function))
2. 提取所有符合条件的SUM值
针对Aparam=1的所有参数组合,一次性提取对应的SUM值:
# 过滤+提取SUM值 filtered_sums <- param_grid %>% filter(Aparam == 1) %>% pull(result) %>% map_dbl("SUM") # 输出结果 filtered_sums #> [1] 11 21
逻辑:先筛选符合条件的参数行,再提取结果列表,最后用map_dbl批量取出每个列表中的SUM元素,得到所有符合条件的SUM值集合。
3. 提取所有矩阵到新数据框
方案1:合并为带参数标识的单数据框
把所有矩阵转换为长格式,同时保留原参数信息,方便后续分析:
matrix_combined_df <- param_grid %>% mutate( # 将矩阵转为tibble,添加行索引 mat_tibble = map(result, ~ as_tibble(.x, .name_repair = ~ str_c("col", seq_along(.x)))) %>% map(~ mutate(.x, row_idx = row_number())) ) %>% # 展开矩阵数据,保留原参数 unnest(mat_tibble) # 查看结果 matrix_combined_df
方案2:每个矩阵存为独立数据框
如果需要将不同参数组合的矩阵单独保存为数据框(按参数命名):
# 生成数据框名称,批量创建并存入全局环境 param_grid %>% mutate( df_name = str_c("matrix_A", Aparam, "_B", Bparam), mat_df = map(result, ~ as_tibble(.x, .name_repair = ~ str_c("col", seq_along(.x)))) ) %>% select(df_name, mat_df) %>% deframe() %>% list2env(envir = .GlobalEnv) # 此时全局环境中会生成如matrix_A1_B10、matrix_A1_B20等独立数据框
内容的提问来源于stack exchange,提问作者Anne Kruijt
相关产品推荐
相关产品推荐

