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
相关产品推荐
相关产品推荐

