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

