我不知道这一点。
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)
无法正常工作令人困惑。在我看来,这似乎一点都不直观。 最佳答案
好吧,%>%
运算符是从magrittr
包中借来的,该包定义了following rules:
您可以看到在此示例中,整个数据帧仍作为第一个参数传递
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
因此,您将同时获取到data.frame和向量(该函数正在接收两个参数)。我相信这是因为您没有将
.
移到第一个参数以外的其他位置,所以您没有更改将对象作为第一个参数传递的行为。碰巧的是,
magrittr
包在这种情况下使用了不同的运算符。您可以使用%$%
。library(magrittr)
dat %$% all(b)
# [1] TRUE
关于r - dplyr和所有的可能性,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34055700/