如何在 ggplot 后使用 %T>% 管道?

3

让我们来看一下以下两段代码:

mtcars %>%
    ggplot(aes(x = cyl, y = mpg))+
    geom_line()

这个代码有效并生成以下图表:

enter image description here

现在让我们看看这个:

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>%文档中,我希望在这种情况下左侧对象mtcarsggplot之后被返回。不幸的是,这似乎行不通。我是否误解了%T>%管道符号?要使其正常工作,代码应该是什么样子的?


2
你没有误解%T>%运算符。你误解了+.gg运算符(即在将geom_line调用添加到绘图时)。ggplot代码需要作为单个单元分组在一起(例如通过将其包装在花括号中)。你编写代码的方式是,有一个新的管道从geom_line调用开始,然后将其传递给group_by。从概念上讲,magrittr运算符在+运算符之前计算。 - Allan Cameron
1个回答

3
你需要在 ggplot 函数调用外面包一层 print 函数,这样你才能同时得到两个结果。你可以使用以下代码:
library(tidyverse)
#> Warning: package 'ggplot2' was built under R version 4.1.2
#> Warning: package 'tibble' was built under R version 4.1.2
#> Warning: package 'tidyr' was built under R version 4.1.2
#> Warning: package 'readr' was built under R version 4.1.2
#> Warning: package 'dplyr' was built under R version 4.1.2
library(magrittr)
#> Warning: package 'magrittr' was built under R version 4.1.2
#> 
#> Attaching package: 'magrittr'
#> The following object is masked from 'package:purrr':
#> 
#>     set_names
#> The following object is masked from 'package:tidyr':
#> 
#>     extract
mtcars %T>%
  {print(ggplot(., aes(x = cyl, y = mpg))+
  geom_line())} %>%
  group_by(cyl) %>% 
  summarise(mpg = mean(mpg))

#> # A tibble: 3 × 2
#>     cyl   mpg
#>   <dbl> <dbl>
#> 1     4  26.7
#> 2     6  19.7
#> 3     8  15.1

reprex 包 (v2.0.1) 于2022年06月30日创建


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接