没有magrittr的dplyr博览会?

时间:2018-01-15 06:01:04

标签: r dplyr

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()。

3 个答案:

答案 0 :(得分:4)

来自magrittr的vigenettes:

  

“exposition”管道操作符%$%公开了其中的名称   左侧对象到右侧表达式。实质上,   它是使用with函数的简写。

所以你可以用with

来做到这一点
data.frame(A=rbinom(100,1,p=0.5),B=rbinom(100,1,p=0.5)) %>% with(chisq.test(A,B))

答案 1 :(得分:3)

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

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

答案 2 :(得分:1)

除了@Marius解决方案之外,如果我们只需要提取summarise

,那么p-value就有一个选项
 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