与dplyr和所有的奇怪

时间:2015-12-03 00:26:11

标签: r dplyr magrittr

我无法弄清楚这一点。

library(dplyr)
dat <- data.frame(a = 1:5,b = rep(TRUE,5))

# this doesn't work
dat %>% all(.$b) # tricky

# this doesn't work
dat %>% all(b) # 

# this does
dat %>% .$b %>% all

我觉得all(.$b)不起作用令人困惑。这对我来说似乎并不直观。

1 个答案:

答案 0 :(得分:6)

好吧,<h2>Model</h2> <pre>{{vm.model }}</pre> 运算符是从定义following rules%>%包借来的:

  1. 默认情况下,左侧(LHS)将作为右侧(RHS)出现的函数的第一个参数进行管道输入。
  2. 当在第一个位置以外的位置需要LHS时,可以使用点“。”作为占位符。
  3. 您可以看到整个数据框仍作为此示例的第一个参数传入

    magrittr

    所以你得到data.frame和vector(函数接收两个参数)。我相信这是因为您没有将f<-function(...) str(list(...)) dat %>% f(.$b) # $ :'data.frame': 5 obs. of 2 variables: # ..$ a: int [1:5] 1 2 3 4 5 # ..$ b: logi [1:5] TRUE TRUE TRUE TRUE TRUE # $ : logi [1:5] TRUE TRUE TRUE TRUE TRUE 移动到第一个参数以外的位置,因此您不会将行为作为第一个参数传递给对象。

    恰好,.包具有不同的运算符,可用于此类情况。您可以使用magrittr

    %$%