使用dplyr的summarise_at()报错:.funs参数格式问题求解
解决dplyr中
summarise_at()的报错问题 报错信息
Error in
summarise_at():
!.funsmust be a one sided formula, a function, or a function name.
可复现数据集
ex <- data.frame(treatment = c(1,2,3,1,2,3,1,2,3), percent = c(55,44,33,22,11,55,44,33,22))
触发错误的代码
# 将treatment转换为因子类型 ex$treatment <- as.factor(ex$treatment) ex %>% group_by(treatment) %>% summarise_at(vars(percent), list(name=mean))
修正方案
1. 推荐:使用dplyr 1.0.0+的现代语法(summarise() + across())
summarise_at()属于旧版语法,dplyr 1.0.0之后官方推荐使用across()配合summarise(),写法更直观,且能直接保留原列名:
ex$treatment <- as.factor(ex$treatment) ex %>% group_by(treatment) %>% summarise(across(percent, mean))
2. 适配旧版summarise_at()语法
如果坚持使用summarise_at(),需要调整.funs的传入格式,用单侧公式或直接传递函数名,同时可以指定列名:
ex$treatment <- as.factor(ex$treatment) # 写法1:直接传函数名,自动生成原列名+_mean的列 ex %>% group_by(treatment) %>% summarise_at(vars(percent), mean) # 写法2:用命名单侧公式,自定义列名为原列名 ex %>% group_by(treatment) %>% summarise_at(vars(percent), list(percent = ~mean(.)))
3. 最简写法:直接在summarise()中计算
不需要任何后缀函数,直接指定计算逻辑,结果列名直接设置为原列名:
ex$treatment <- as.factor(ex$treatment) ex %>% group_by(treatment) %>% summarise(percent = mean(percent))
内容的提问来源于stack exchange,提问作者s_o_c_account
相关产品推荐
相关产品推荐

