R语言管道符(%>%)使用报错:mean函数提示参数非数值型?
问题原因与解决方法
你遇到的问题是管道符%>%的参数传递逻辑导致的:
- 管道符默认会把左侧的对象(这里是整个数据框
b_2021_01)作为右侧函数的第一个参数传入。 - 你写的
b_2021_01 %>% mean(Day.of.week, na.rm=T)等价于mean(b_2021_01, Day.of.week, na.rm=T),这时候mean会尝试对整个数据框计算均值,而数据框不是数值/逻辑类型,自然触发警告;同时Day.of.week被错误地当成了mean函数的第二个参数trim(用于指定要修剪的首尾比例),完全偏离了你要提取列的意图。
几种正确的写法
方法1:用pull提取列后计算均值(需加载dplyr包)
library(dplyr) b_2021_01 %>% pull(Day.of.week) %>% mean(na.rm = T)
方法2:用大括号明确指定参数来源
b_2021_01 %>% {mean(.$Day.of.week, na.rm = T)}
大括号会改变管道的默认行为,让你可以手动用.$引用左侧的对象,从而正确提取列。
方法3:直接在管道里用$提取列
b_2021_01 %>% mean(.$Day.of.week, na.rm = T)
方法4:用dplyr的summarize生成汇总结果
如果需要保留数据框格式的结果,可以用:
library(dplyr) b_2021_01 %>% summarize(mean_day_of_week = mean(Day.of.week, na.rm = T))
内容的提问来源于stack exchange,提问作者Alexis SM
相关产品推荐
相关产品推荐

