当前位置:  开发笔记 > 编程语言 > 正文

与dplyr和所有的奇怪

如何解决《与dplyr和所有的奇怪》经验,为你挑选了1个好方法。

我无法弄清楚这一点.

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> MrFlick..:

好吧,%>%运营商是从magrittr包中借来的,它定义了以下规则:

    默认情况下,左侧(LHS)将作为右侧(RHS)出现的函数的第一个参数进行管道输入.

    当在第一个位置以外的位置需要LHS时,可以使用点"."作为占位符.

您可以看到整个数据框仍然作为此示例的第一个参数传入

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和vector(函数接收两个参数).我相信这是因为您没有移动.到第一个参数以外的位置,因此您不会将行为作为第一个参数传递给对象.

事实恰恰相反,该magrittr包具有不同的运算符,可用于此类情况.你可以用%$%.

library(magrittr)
dat %$% all(b)
# [1] TRUE

推荐阅读
保佑欣疼你的芯疼
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有