“与”之间的区别是什么+&引用;ggplot2中的运算符和%>;%&引用;magrittr的接线员?

“与”之间的区别是什么+&引用;ggplot2中的运算符和%>;%&引用;magrittr的接线员?,r,ggplot2,magrittr,R,Ggplot2,Magrittr,ggplot2中的“+”运算符与magrittr中的“%%>”运算符有什么区别 我告诉他们,如果我们考虑下面的脚本,它们是相同的。 library(magrittr) library(ggplot2) # 1. This works ggplot(data = mtcars, aes(x=wt, y = mpg)) + geom_point() # 2. This works ggplot(data = mtcars) + aes(x=wt, y = mpg) + geom_point()

ggplot2中的
“+”
运算符与magrittr中的
“%%>”
运算符有什么区别

我告诉他们,如果我们考虑下面的脚本,它们是相同的。
library(magrittr)
library(ggplot2)

# 1. This works
ggplot(data = mtcars, aes(x=wt, y = mpg)) + geom_point()

# 2. This works
ggplot(data = mtcars) + aes(x=wt, y = mpg) + geom_point()

# 3. This works
ggplot(data = mtcars) + aes(x=wt, y = mpg) %>% geom_point()

# 4. But this doesn't
ggplot(data = mtcars) %>% aes(x=wt, y = mpg) %>% geom_point()

管道与添加的
ggplot2
非常不同。管道操作符,
%%>%%
所做的是获取左侧的结果,并将其作为右侧函数的第一个参数。例如:

1:10 %>% mean()
# [1] 5.5
完全等于
平均值(1:10)
。管道更适用于替换多重嵌套函数,例如

x = factor(2008:2012)
x_num = as.numeric(as.character(x))
# could be rewritten to read from left-to-right as
x_num = x %>% as.character() %>% as.numeric()
但这一切都在上得到了很好的解释,您应该阅读更多的例子

利用这些知识,我们可以将管道示例重新编写为嵌套函数,并看到它们仍然执行相同的操作;但现在(希望如此)很明显为什么#4不起作用:

# 3. This is acceptable ggplot2 syntax
ggplot(data = mtcars) + geom_point(aes(x=wt, y = mpg))

# 4. This is not
geom_point(aes(ggplot(data = mtcars), x=wt, y = mpg))

ggplot 2
包括一个用于
ggplot
对象的特殊
“+”
方法,用于向绘图添加图层。直到您提出问题,我才知道它也适用于
aes()
函数,但显然这也是定义好的。这些都是在
ggplot2
中专门定义的。ggplot2中
+
的使用早于管道,虽然用法类似,但功能却截然不同

有趣的是,哈德利·威克姆(ggplot2的创建者):

…如果我早一点发现了管道,就不会有ggplot2了,因为你可以把ggplot图形写成


另外,切题地说,您不需要所有这些导入。在您的示例中包含它们很难排除跨库干扰。我对您的问题进行了编辑,以使用内置数据而不是您自己的数据,消除未使用的包,并使整个过程可以复制/粘贴。我只是在仓促的评论中忽略了%>%优于+的优先级,这一点也不奇怪是的,他们说我回应的评论已经不见了。现在清理一下。哇,哈德利·威克姆的那句话真是轰动人心。这有助于解释我的困惑。难怪ggplot2如此混乱。它正试图改造管道!加号运算符现在非常合理:它是ggplot2特定的,我应该停止尝试理解它。这只是ggplot2添加图层的方式,仅此而已。
ggplot(mtcars, aes(wt, mpg)) %>%
  geom_point() %>%
  geom_smooth()