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

R中dplyr的summarize调用自定义函数时传入na.rm=TRUE不生效原因问询

问题排查与解决

错误根因

你自定义的Test1函数仅声明了单个输入参数t,没有预留na.rm参数,调用时额外传入na.rm = TRUE属于未定义的多余参数,R会直接抛出参数不匹配的运行错误。

修复方法

步骤1:修改自定义函数定义

补充na.rm参数和对应的空值过滤逻辑,也可根据需求调整多众数的返回规则:

Test1 <- function(t, na.rm = FALSE) {
  # 处理空值逻辑
  if (na.rm) {
    t <- t[!is.na(t)]
  }
  s <- table(as.vector(t))
  # 若需每个分组仅返回1个众数,替换为下行代码即可
  # return(names(which.max(s)))
  names(s)[s == max(s)]
}

步骤2:运行修改后的统计语句

此时你调整后的summarize语句即可正常运行:

library(dplyr)

Test <- structure(
  list(date = c("2021-11-01","2021-11-02","2021-11-10"),
       Week= c("Wednesday","Wednesday","Thursday"),
       time = c(5,4,0)),
  class = "data.frame", row.names = c(NA, -3L))

Test2 <- Test %>%
  group_by(Week = tools::toTitleCase(Week)) %>% 
  summarize(Mode=Test1(time, na.rm = TRUE),.groups = 'drop')

运行后输出结果和原逻辑一致,同时支持空值过滤。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 03:36:03