使用管道而不提供第一个参数

时间:2016-08-02 10:14:37

标签: r pipe magrittr

%>%管道操作员是否总是将左侧(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)

但想找到%>% ...

的解决方案

1 个答案:

答案 0 :(得分:14)

  

%>%管道操作员是否总是将左侧(LHS)送到右侧的第一个参数(RHS)?即使在RHS调用中再次指定第一个参数?

没有。您自己已经注意到了异常:如果右侧使用.,左侧的第一个参数是而不是已经输入。您需要手动传递它。 / p>

但是,在您的情况下,正在发生,因为您没有单独使用.,而是在表达式中使用它。为了避免将左侧作为第一个参数,您还需要使用大括号:

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