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

R语言pmap调用tidyeval自定义分组统计函数报错如何修复?

问题修复方案

错误原因

  • pmap接收的参数列表中直接书写Department时,R会在全局环境搜索该名称的对象,无法识别为传入自定义函数的列名参数,因此触发未找到对象的报错。
  • 你的需求仅需要迭代年份这一个可变参数,data和colName均为固定值,不需要使用多参数映射的pmap,使用单参数迭代的map即可满足需求。

修复代码

方案1:不修改原函数,直接调整迭代写法

仅迭代年份,固定按Department维度统计:

library(purrr)
# 迭代年份向量调用自定义函数
yearly_turnover <- map(years, ~ emp_term_var(data = df, colName = Department, year = .x))
# 给结果列表按年份命名,方便后续提取
names(yearly_turnover) <- years

# 调用示例:提取2015年的统计结果
yearly_turnover[["2015"]]

方案2:修改函数支持字符串传参,避免非标准评估传递问题

如果需要灵活传入列名字符串,可以调整原函数的参数接收逻辑,调用时更不容易出错:

# 修改后的函数
emp_term_var <- function(data, colName, year = "2015") {
  # 把字符串列名转为rlang符号
  colName <- rlang::sym(colName) 
  term_test <- data %>%
    filter(lubridate::year(DateofTermination) == year) %>%
    group_by(!!colName) %>%
    count(!!colName) %>%
    janitor::clean_names()
  return(term_test)
}

# 调用时直接传入列名字符串即可
yearly_turnover <- map(years, ~ emp_term_var(df, "Department", .x))

多维度+多年份迭代方案

如果你需要同时按多个维度(比如Department、position、managername)统计多年的离职数据,可以用pmap处理多参数组合:

# 定义要统计的维度列(字符串格式)
stats_cols <- c("Department", "position", "managername")
# 生成所有 数据框+维度列+年份 的参数组合
param_grid <- expand.grid(
  data = list(df),
  colName = stats_cols,
  year = years,
  stringsAsFactors = FALSE
)
# 多参数迭代调用
all_stats <- pmap(param_grid, emp_term_var)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 01:00:05