如何按变量名在数据框上应用purrr风格lambda公式列表?
问题描述
现有模拟数据包含X1至X5共5个变量:
set.seed(123) df <- data.frame(matrix(rnorm(500), 100, 5))
希望使用命名的purrr风格lambda公式列表,对特定变量执行指定操作:
fun_list <- list( X2 = ~ quantile(.x, c(0.1, 0.9), na.rm = TRUE), X4 = ~ fivenum(.x, na.rm = TRUE) )
需要按变量名将fun_list应用到df中,希望找到能直接处理这类公式的函数,预期用法类似:
execute(fun_list, environment = df)
预期输出:
$X2 10% 90% -1.289408 1.058432 $X4 [1] -2.465898194 -0.737146704 -0.003508661 0.693634712 2.571458146
解决方案
方法1:用purrr::imap直接处理
imap支持同时遍历列表的元素和名称,刚好可以用列表名称匹配df中的变量,自动解析公式并执行:
library(purrr) imap(fun_list, ~ .x(df[[.y]]))
方法2:用purrr::map2实现
提取fun_list的名称作为变量名向量,和公式列表一起传入map2,同样无需手动转换公式:
library(purrr) map2(fun_list, names(fun_list), ~ .x(df[[.y]]))
方法3:封装成自定义execute函数
如果想要完全贴合你预期的调用方式,可以自己封装一个简单函数:
library(purrr) execute <- function(fun_list, environment) { imap(fun_list, ~ .x(environment[[.y]])) } # 调用示例 execute(fun_list, environment = df)
以上方法都不需要手动调用rlang::as_function,purrr会自动处理公式风格的lambda函数,运行后即可得到预期输出。
内容的提问来源于stack exchange,提问作者user18894435
相关产品推荐
相关产品推荐

