Ответ 1
Трубопровод сильно отличается от добавления 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))
ggplot2
включает специальный "+"
метод для объектов ggplot
, который он использует для добавления слоев к графикам. Я не знал, пока вы не задали свой вопрос о том, что он также работает с функцией aes()
, но, по-видимому, тоже определен. Все они специально определены в ggplot2
. Использование +
в ggplot2 предшествует трубе, и, хотя использование аналогично, функциональность совсем другая.
Как интересная сторона, Хэдли Уикхэм (создатель ggplot2) сказал, что:
... если бы я раньше обнаружил канал, никогда не было бы ggplot2, потому что вы могли бы писать графику ggplot как
ggplot(mtcars, aes(wt, mpg)) %>%
geom_point() %>%
geom_smooth()