簡體   English   中英

ggplot2 中的“+”運算符和 magrittr 中的“%>%”運算符有什么區別?

[英]What is the difference between the “+” operator in ggplot2 and the “%>%” operator in 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()

管道與ggplot2的添加非常不同。 管道運算符%>%所做的是獲取左側的結果並將其作為右側函數的第一個參數。 例如:

1:10 %>% mean()
# [1] 5.5

完全等同於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()

但這一切都在 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))

ggplot2ggplot對象包含一個特殊的"+"方法,它用於向繪圖添加圖層。 直到你問你的問題,我才知道它也適用於aes()函數,但顯然這也被定義了。 這些都是在ggplot2專門定義的。 ggplot2 中+的使用早於管道,雖然用法相似,但功能卻大不相同。

作為一個有趣的旁注,Hadley Wickham(ggplot2 的創建者)

...如果我早點發現管道,就永遠不會有 ggplot2,因為您可以將 ggplot 圖形編寫為

ggplot(mtcars, aes(wt, mpg)) %>%
  geom_point() %>%
  geom_smooth()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM