【问题标题】:exposition in dplyr without magrittr?没有 magrittr 的 dplyr 中的博览会?
【发布时间】:2018-01-15 06:01:03
【问题描述】:

dplyr 是否有 magrittr 的 %$% 运算符的首选语法,因为默认情况下不会在 tidyverse 中加载它?比如我经常用这个:

data.frame(A=rbinom(100,1,p=0.5),B=rbinom(100,1,p=0.5)) %$% chisq.test(A,B)

仅在 tidyverse 中是否有首选方法来执行此操作?我觉得 pull() 应该可以做到这一点,但我不知道如何在管道内调用 pull() 两次。

【问题讨论】:

  • magrittr 是 tidyverse 的一部分,它只是不是使用 library(tidyverse) 加载的包之一
  • @KevinArseneau 所以你的解决方案是“如果你想使用%$%,请使用library(magrittr)
  • @Spacedman,我的评论并不是真的打算成为一个解决方案,我认为其他人已经做得很好。但我认为值得澄清的是,元包不是 tidyverse 的限制,并且间接地,是的,library(magrittr) 工作得很好。尽管我不喜欢 .$x 与裸列名称相比,但我更喜欢花括号方法。

标签: r dplyr


【解决方案1】:

来自magrittr的小插曲:

“公开”管道运算符%$% 公开了 左侧的对象到右侧的表达式。本质上, 它是使用 with 函数的简写。

所以你可以使用with

data.frame(A=rbinom(100,1,p=0.5),B=rbinom(100,1,p=0.5)) %>% with(chisq.test(A,B))

【讨论】:

    【解决方案2】:

    您可以使用点. 来引用原始数据框,并使用花括号{} 来防止%>% 填充第一个参数:

    data.frame(A=rbinom(100,1,p=0.5),B=rbinom(100,1,p=0.5)) %>% 
        {chisq.test(.$A, .$B)} 
    

    【讨论】:

    • 为什么不使用library(magrittr),然后使用%$% 管道?
    【解决方案3】:

    除了@Marius 解决方案,如果我们只需要提取p-value,还有summarise 选项

     set.seed(24)
     data.frame(A=rbinom(100,1,p=0.5),B=rbinom(100,1,p=0.5)) %>% 
             summarise(p_val = chisq.test(A, B)$p.val)
     #     p_val
     #1 0.8394397
    

    假设,我们需要获取其他参数,那么使用broom::tidy

    set.seed(24)
    data.frame(A=rbinom(100,1,p=0.5),B=rbinom(100,1,p=0.5)) %>% 
        summarise(p_val = list(broom::tidy(chisq.test(A, B)))) %>%
        unnest
    #  statistic   p.value parameter                                                       method
    #1 0.0410509 0.8394397         1 Pearson's Chi-squared test with Yates' continuity correction
    

    【讨论】:

      猜你喜欢
      • 2014-11-06
      • 1970-01-01
      • 2014-06-30
      • 1970-01-01
      • 2022-07-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多