让我们来看一下以下两段代码:
mtcars %>%
ggplot(aes(x = cyl, y = mpg))+
geom_line()
这个代码有效并生成以下图表:
现在让我们看看这个:
mtcars %>%
group_by(cyl) %>%
summarise(mpg = mean(mpg))
这也可行,并创建以下输出:
# A tibble: 3 x 2
cyl mpg
<dbl> <dbl>
1 4 26.7
2 6 19.7
3 8 15.1
然而,这并不起作用:
mtcars %T>%
ggplot(aes(x = cyl, y = mpg))+
geom_line() %>%
group_by(cyl) %>%
summarise(mpg = mean(mpg))
它会报以下错误:
Error in UseMethod("group_by") :
no applicable method for 'group_by' applied to an object of class "c('LayerInstance', 'Layer', 'ggproto', 'gg')"
为什么它不起作用?从%T>%
文档中,我希望在这种情况下左侧对象mtcars
在ggplot
之后被返回。不幸的是,这似乎行不通。我是否误解了%T>%
管道符号?要使其正常工作,代码应该是什么样子的?
%T>%
运算符。你误解了+.gg
运算符(即在将geom_line
调用添加到绘图时)。ggplot代码需要作为单个单元分组在一起(例如通过将其包装在花括号中)。你编写代码的方式是,有一个新的管道从geom_line
调用开始,然后将其传递给group_by
。从概念上讲,magrittr运算符在+
运算符之前计算。 - Allan Cameron