Ant*_*ert 13 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()
# 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()
Run Code Online (Sandbox Code Playgroud)
Gre*_*gor 14
管道与添加非常不同ggplot2.管道操作符%>%所做的是获取左侧的结果并将其作为右侧的函数的第一个参数.例如:
1:10 %>% mean()
# [1] 5.5
Run Code Online (Sandbox Code Playgroud)
完全等同于mean(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()
Run Code Online (Sandbox Code Playgroud)
但这一切都很好地解释了R>%>%的含义?,你应该阅读更多的例子.
使用这些知识,我们可以将管道示例重新编写为嵌套函数,并看到它们仍然执行相同的操作; 但现在(希望)很明显为什么#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))
Run Code Online (Sandbox Code Playgroud)
ggplot2包括对象的特殊"+"方法,用于ggplot将图层添加到图中.我不知道,直到你问你的问题,它也适用于该aes()功能,但显然也是定义的.这些都是特别定义的ggplot2.+在ggplot2中使用早于管道,虽然用法类似,但功能却完全不同.
作为一个有趣的旁注,Hadley Wickham(ggplot2的创建者)说:
...如果我早些时候发现了管道,那么就不会有ggplot2,因为你可以把ggplot图形写成
ggplot(mtcars, aes(wt, mpg)) %>%
geom_point() %>%
geom_smooth()
Run Code Online (Sandbox Code Playgroud)