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

R语言如何将自定义函数传入使用map和dplyr的函数并解决传参报错

问题修复方案

直接报错原因

你定义df_count函数时第二个形参命名为f,但调用时传入了.f = n_hires,参数名和形参不匹配,R判定.f是多余的未使用参数,因此抛出错误。

额外问题修正

除了参数名不匹配外,你的函数还有两处潜在问题需要修复:

  • 函数内部调用的参数名.f和你定义的形参f不一致,会导致内部调用找不到函数
  • 函数内引用的years没有作为入参,会直接读取全局环境的变量,稳定性差;内部的.data是dplyr语法专用代词,不能用来指代你传入的数据集参数

修正后代码

版本1:修改调用参数匹配原函数定义

# 修正后的df_count函数
df_count <- function(data, f, years) {
  map_dbl(years, ~ f(data = data, year = .x)) %>%
    setNames(years) %>%
    as.data.frame() %>%
    setNames("n") %>%
    rownames_to_column("Year")
}

# 正确调用示例
target_years <- 2019:2023 # 替换为你要统计的实际年份范围
df_count(data = df, f = n_hires, years = target_years)

版本2:修改形参名匹配原调用写法

如果你不想改调用时的.f参数名,可以直接调整函数定义的形参名:

# 调整形参名为.f
df_count <- function(data, .f, years) {
  map_dbl(years, ~ .f(data = data, year = .x)) %>%
    setNames(years) %>%
    as.data.frame() %>%
    setNames("n") %>%
    rownames_to_column("Year")
}

# 原调用写法补充years参数即可运行
df_count(data = df, .f = n_hires, years = 2019:2023)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 10:48:03