在没有magrittr的情况下用dplyr进行阐述?

在没有magrittr的情况下用dplyr进行阐述?,r,dplyr,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()两次。您可以使用点引用原始数据帧,并使用大括号{}防止%%>%填充第一个参数: dat

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

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

data.frame(A=rbinom(100,1,p=0.5),B=rbinom(100,1,p=0.5)) %>% 
    {chisq.test(.$A, .$B)} 
从以下的vigenetes:

“exposition”管道操作符,
%%$%
公开 将左侧对象转换为右侧表达式。基本上, 这是使用with函数的简写

所以你可以用
来做:

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

除了@Marius solution,如果我们只需要提取
p值

 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

是tidyverse的一部分,它不是使用
库(tidyverse)
@KevinArseneau加载的包之一,因此您的解决方案是“如果您想使用
%$%
,请使用
库(magrittr)
”@Spacedman,我的评论并不是真的想成为一个解决方案,我认为其他人在这方面做得很好。但我认为需要澄清的是,元包不是tidyverse的限制,而且间接地说,
library(magrittr)
工作得很好。虽然我不喜欢
$x
而不喜欢裸列名,但我还是喜欢花括号方法。为什么不使用
库(magrittr)
然后使用
%$%
管道呢?