2016-08-02 3 views
6

Является ли оператор трубы %>% всегда подающим левую сторону (LHS) к первому аргументу правой части (RHS)? Даже если первый аргумент снова указан в вызове RHS?Использовать трубу без подачи первого аргумента

Скажем, я хочу, чтобы указать, какие переменные использовать в cor():

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

Но это не удается, это выглядит, как его называют что-то вроде cor(., x=.$Sepal.Length, y=.$Sepal.Width)?

Я знаю, что я мог бы использовать вместо

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

Но хотел найти решение с %>% ...

ответ

10

ли оператор %>% трубы всегда кормлениями левого (LHS) в первый аргумент правой части (RHS)? Даже если первый аргумент снова указан в вызове RHS?

No. Вы заметили исключение себя: если правая часть использует ., первый аргумент левой стороны является не кормили в Вам необходимо пройти вручную..

Однако, это не происходит в вашем случае, потому что вы не используете . самостоятельно, вы используете его внутри выражения. Чтобы избежать левую, подаваемых в качестве первого аргумента, то дополнительно необходимо использовать фигурные скобки:

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

Или:

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

- в конце концов, это то, что %$% есть для, в отличие до %>%.

Но сравните:

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

Здесь мы передаем выражение с левой стороны явно как data аргумент lm. Поступая таким образом, мы предотвращаем его передачу в качестве первого аргумента lm.

+0

Отлично! Мне не хватало скобки, спасибо за объяснение! и жаль, что опечатка упоминала первоначально% $%, когда я имел в виду%>%! – Matifou