2016-08-02 42 views
6

Ist der %>% Rohrbediener immer die linke Seite (LHS) auf das erste Argument der rechten Seite (RHS)? Auch wenn das erste Argument im RHS-Aufruf erneut angegeben wird?Verwenden Sie Rohr ohne das erste Argument zu führen

sagen, dass ich die Variable verwenden in cor() angeben möchten:

library(magrittr) 
iris %>% 
    cor(x=.$Sepal.Length, y=.$Sepal.Width) 

Aber dies nicht gelingt, es sieht aus wie es so etwas wie cor(., x=.$Sepal.Length, y=.$Sepal.Width) nennen?

Ich weiß, dass ich stattdessen

iris %$% 
    cor(x=Sepal.Length, y=Sepal.Width) 

verwenden könnte aber wollten eine Lösung mit %>% ...

Antwort

10

Ist das %>% Rohr Bediener immer Fütterung der linken Seite (LHS) finden das erste Argument der rechten Seite (RHS)? Auch wenn das erste Argument im RHS-Aufruf erneut angegeben wird?

Nein, Sie haben die Ausnahme selbst bemerkt: Wenn die rechte Seite verwendet ., das erste Argument der linken Seite ist nicht eingespeist Sie müssen es manuell zu übergeben..

Dies ist jedoch nicht passiert in Ihrem Fall, weil Sie . nicht von selbst verwenden, verwenden Sie es in einem Ausdruck. Um die linke Seite zu vermeiden als erstes Argument zugeführt wird, müssen Sie zusätzlich Klammern verwenden:

iris %>% {cor(x = .$Sepal.Length, y = .$Sepal.Width)} 

Oder:

iris %$% cor(x = Sepal.Length, y = Sepal.Width) 

- immerhin das ist, was %$% ist dort, im Gegensatz zu %>%.

Aber vergleichen:

iris %>% lm(Sepal.Width ~ Sepal.Length, data = .) 

Hier sind wir auf der linken Seite Ausdruck explizit als data Argument lm vorbei. Dadurch verhindern wir, dass es als erstes Argument an lm übergeben wird.

+0

Großartig! Ich habe die Klammer vermisst, danke für die Erklärung! und sorry für den Tippfehler, der anfänglich% $% erwähnt, wenn ich%>% meinte! – Matifou