2016-08-02 46 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调用中再次指定了第一个参数?

号你已经注意到自己的异常:如果右侧使用.,在左侧的第一个参数是不喂你需要手动将它传递

但是,这是而不是发生在您的案例中,因为您自己没有使用.,您正在表达式中使用它。为了避免左侧被送入作为第一个参数,你还需要使用大括号:

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