如何无需罗列所有列名,用purrr::pmap从数据框设置函数参数?
解决pmap手动罗列参数的问题
当数据框列数较多时,不用在pmap的函数参数里手动列出所有列名,有两种实用方法:
方法1:用...接收参数并转为环境变量
通过list2env()将传入的所有参数转换为当前环境的变量,这样可以直接使用列名调用对应值:
library(tibble) library(purrr) df <- tibble( a = "a", b = "b", c = 1, # 注意:原代码中c/d/e为字符无法相加,此处改为数值示例 d = 2, e = 3, f = 4, g = 2 ) pmap(df, function(...) { # 将传入的参数列表转为当前环境的变量 list2env(list(...), envir = environment()) var_1 <- paste0(a, b) var_2 <- c + d + e var_3 <- f/g tibble( a = var_1, b = var_2, c = var_3 ) })
方法2:将参数转为列表后按索引提取
直接把传入的参数存为列表,通过$或[[提取对应列的值,无需转换环境:
pmap(df, function(...) { row_data <- list(...) var_1 <- paste0(row_data$a, row_data$b) var_2 <- row_data$c + row_data$d + row_data$e var_3 <- row_data$f/row_data$g tibble( a = var_1, b = var_2, c = var_3 ) })
注意点
- 原代码中
c + d + e如果是字符类型会报错,实际使用时需确保操作的列类型符合运算要求。 - 如果需要将结果直接合并为一个数据框,可以用
pmap_dfr()替代pmap(),无需后续手动绑定。
内容的提问来源于stack exchange,提问作者Alvaro Morales
相关产品推荐
相关产品推荐

