Piping è molto diverso da oltre ggplot2
s'. Ciò che l'operatore di pipe, %>%
, fa è prendere il risultato del lato sinistro e metterlo come primo argomento della funzione sul lato destro. Ad esempio:
1:10 %>% mean()
# [1] 5.5
È esattamente equivalente a mean(1:10)
. Il tubo è più utile sostituire funzioni nidificate moltiplicano, ad esempio,
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()
ma questo è spiegato ben oltre a What does %>% mean in R?, si dovrebbe leggere che per un paio di esempi.
Utilizzando questa conoscenza, possiamo riscrivere i vostri esempi di pipe come funzioni annidate e vedere che fanno ancora le stesse cose; ma ora è (si spera) è evidente il motivo per cui # 4 non funziona:
# 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
include uno speciale metodo di "+"
per ggplot
oggetti, che utilizza per aggiungere livelli a trame. Non lo sapevo finché non hai fatto la tua domanda che funziona anche con la funzione aes()
, ma a quanto pare è definita anche questa. Questi sono tutti definiti in modo specifico all'interno di ggplot2
. L'uso di +
in ggplot2 è precedente alla pipa e, sebbene l'utilizzo sia simile, la funzionalità è abbastanza diversa.
Come un interessante side-nota, Hadley Wickham (il creatore di ggplot2) said that:
... se avessi scoperto il tubo in precedenza, non c'è mai sarebbe stata una ggplot2, perché si potrebbe scrivere grafica ggplot come
ggplot(mtcars, aes(wt, mpg)) %>%
geom_point() %>%
geom_smooth()
Inoltre, tangenzialmente, non avete bisogno di tutte queste importazioni. Includerli nel tuo esempio rende difficile escludere interferenze tra le librerie. –
Ho modificato la tua domanda per utilizzare i dati incorporati invece dei tuoi dati personali, per eliminare i pacchetti non utilizzati e per rendere il tutto copia/incollabile. – Gregor