带有magrittr-tee运算符的多个GGP图

带有magrittr-tee运算符的多个GGP图,r,ggplot2,magrittr,R,Ggplot2,Magrittr,我正在试图弄清楚,当我将数据传递给ggplot命令时,为什么tee运算符%T>%不起作用 这个很好用 library(ggplot2) library(dplyr) library(magrittr) mtcars %T>% qplot(x = cyl, y = mpg, data = ., geom = "point") %>% qplot(x = mpg, y = cyl, data = ., geom = "point") mtcars %>% {ggpl

我正在试图弄清楚,当我将数据传递给ggplot命令时,为什么tee运算符%T>%不起作用

这个很好用

library(ggplot2)
library(dplyr)
library(magrittr)

mtcars %T>%
  qplot(x = cyl, y = mpg, data = ., geom = "point") %>%
  qplot(x = mpg, y = cyl, data = ., geom = "point")
mtcars %>%
  {ggplot() + geom_point(aes(cyl, mpg)) ; . } %>%
  ggplot() + geom_point(aes(mpg, cyl))
这也很好

library(ggplot2)
library(dplyr)
library(magrittr)

mtcars %T>%
  qplot(x = cyl, y = mpg, data = ., geom = "point") %>%
  qplot(x = mpg, y = cyl, data = ., geom = "point")
mtcars %>%
  {ggplot() + geom_point(aes(cyl, mpg)) ; . } %>%
  ggplot() + geom_point(aes(mpg, cyl))
但当我使用tee操作符时,如下所示,它抛出“错误:ggplot2不知道如何处理类protoenvironment的数据”


有人能解释为什么这最后一段代码不起作用吗?

我认为您的问题与操作顺序有关。
+
%T>%
运算符强(根据
?语法
帮助页)。在添加
geom_点之前,需要将data=参数传递到
ggplot
,否则事情会变得一团糟。我想你想要

mtcars %T>%
  {print(ggplot(.) + geom_point(aes(cyl, mpg)))} %>%
  {ggplot(.) + geom_point(aes(mpg, cyl))}
它使用功能性的“速记”符号

mtcars %T>%
  {print(ggplot(.) + geom_point(aes(cyl, mpg)))} %>%
  {ggplot(.) + geom_point(aes(mpg, cyl))}
或者放弃
%T>%
操作符,使用普通管道,并将“%>T%”操作作为新函数显式显示,如下所示

techo%
{techo(ggplot(.)+几何点(aes(cyl,mpg))}%>%
{ggplot(.)+geom_点(aes(mpg,cyl))}

如TFlick所述,%T>%运算符在此处不起作用的原因是操作的优先级:
%any%
+

之前完成。请注意,返回的ggplot对象是一个包含$data字段的列表。这是可以利用的。就我个人而言,我认为这种风格更干净:)


您可能需要将第一个ggplot调用包装为打印,以获得对图形设备的两个调用。
ggpass=function(pp){
print(pp)
return(pp$data)
}
mtcars %>%
  {ggplot() + geom_point(aes(cyl, mpg))} %>% ggpass() %>%
  {ggplot() + geom_point(aes(mpg, cyl))}