2016-08-02 9 views
6

Czy operator rurki %>% zawsze podaje lewą stronę (LHS) do pierwszego argumentu po prawej stronie (RHS)? Nawet jeśli pierwszy argument zostanie ponownie określony w wywołaniu RHS?Użyj rury bez podawania pierwszego argumentu

że chcę, aby określić, które zmienne do wykorzystania w cor():

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

Ale to się nie powiedzie, to wygląda to nazwać coś takiego cor(., x=.$Sepal.Length, y=.$Sepal.Width)?

Wiem, że mógłbym użyć zamiast

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

Ale chcieliśmy znaleźć rozwiązanie %>% ...

Odpowiedz

10

Czy operator %>% rura zawsze karmienia lewą stronę (lewa oś) do pierwszy argument po prawej stronie (RHS)? Nawet jeśli pierwszy argument zostanie ponownie określony w wywołaniu RHS?

nr Zauważyłeś wyjątek siebie: jeśli prawa strona używa ., pierwszy argument po lewej stronie jest nie podawany Trzeba przekazać ją ręcznie..

Jest to jednak nie dzieje się w twoim przypadku, ponieważ nie używasz samodzielnie ., używasz go wewnątrz wyrażenia. Aby uniknąć lewą są podawane jako pierwszy argument, to dodatkowo trzeba używać nawiasów:

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

Lub:

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

- po wszystkim, to co %$% jest tam, w przeciwieństwie do %>%.

Ale porównania:

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

Tutaj jesteśmy zdaniu wyraz lewostronnej wyraźnie jako data argument lm. W ten sposób uniemożliwiamy przekazanie go jako pierwszego argumentu do lm.

+0

Świetnie! Brakowało mi szyny, dzięki za wyjaśnienie! i przepraszam za literówkę podającą początkowo% $%, kiedy miałem na myśli%>%! – Matifou

Powiązane problemy