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

Mat*_*fou 12 r pipe magrittr

%>%管道运营商不断将左手侧(LHS)到右侧(RHS)的第一个参数?即使在RHS调用中再次指定第一个参数?

假设我想指定要使用的变量cor():

library(magrittr)
iris  %>%
  cor(x=.$Sepal.Length, y=.$Sepal.Width)
Run Code Online (Sandbox Code Playgroud)

但这失败了,它看起来像是什么样的cor(., x=.$Sepal.Length, y=.$Sepal.Width)

我知道我可以用

iris  %$%
  cor(x=Sepal.Length, y=Sepal.Width)
Run Code Online (Sandbox Code Playgroud)

但想找到一个解决方案%>%......

Kon*_*lph 15

%>%管道运营商不断将左手侧(LHS)到右侧(RHS)的第一个参数?即使在RHS调用中再次指定第一个参数?

不.你自己注意到了这个例外:如果右侧使用.,左侧的第一个参数不会被输入.你需要手动传递它.

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

iris %>% {cor(x = .$Sepal.Length, y = .$Sepal.Width)}
Run Code Online (Sandbox Code Playgroud)

要么:

iris %$% cor(x = Sepal.Length, y = Sepal.Width)
Run Code Online (Sandbox Code Playgroud)

- 毕竟,那是什么%$%,而不是%>%.

但比较一下:

iris %>% lm(Sepal.Width ~ Sepal.Length, data = .)
Run Code Online (Sandbox Code Playgroud)

在这里,我们将左侧表达式明确地作为data参数传递给lm.通过这样做,我们阻止它作为第一个参数传递给lm.