用管道输送到rcorr

时间:2018-11-09 21:02:19

标签: r

我正在尝试在多个数据帧上将rcorr作为函数的一部分运行,为每个测试提取p值,但是在传递到rcorr时却收到了NA值。

例如,如果我创建一个矩阵并在此矩阵上运行rcorr,则用$P提取pvalue表,并用[2]提取pvalue可以工作...

library(Hmisc)
library(magrittr)

mt <- matrix(c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10), ncol=2)
    rcorr(mt, type="pearson")$P[2]
    [1] 0

但是,如果我尝试通过管道传输,那么我只会收到NA。

mt %>% rcorr(., type="pearson")$P[2]
[1] NA NA

mt %>% rcorr(., type="pearson")$P
Error in .$rcorr(., type = "pearson") : 
  3 arguments passed to '$' which requires 2

有人可以向我解释为什么这行不通或给出解决方法吗?理想情况下,我不需要在运行rcorr

之前为每个矩阵创建变量

谢谢。

3 个答案:

答案 0 :(得分:2)

解决方案

(mt %>% mcor(type = "pearson"))$P[2]
# [1] 0

说明

请注意两者

mt %>% rcorr(., type = "pearson")

mt %>% rcorr(type = "pearson")

按预期工作。问题是您将$[添加到第二个对象,这基本上类似于后续的函数调用。例如,

s <- function(x) c(1, 1 + x)
1 %>% s
# [1] 1 2

可以正常工作,但是

1 %>% s[1]
# Error in .[s, 1] : incorrect number of dimensions

不返回1,因为我们正尝试做类似s[1](1)的事情。

现在

1 %>% s(x = .)[1]
# Error in .[s(x = .), 1] : incorrect number of dimensions

与您一样

mt %>% rcorr(., type = "pearson")$P[2]
# [1] NA NA

比较棘手。请注意,它可以改写为

mt %>% `[`(`$`(rcorr(., type = "pearson"), "P"), 2)
# [1] NA NA

因此,现在很明显,后者不起作用,因为它基本上是

`[`(mt, `$`(rcorr(mt, type = "pearson"), "P"), 2)
# [1] NA NA

被解密后是

mt[rcorr(mt, type = "pearson")$P, 2]
# [1] NA NA

答案 1 :(得分:1)

一个整洁的解决方案,至少我希望如此!

library(dplyr) 
library(broom) 
library(Hmisc) 

mtcars[, 5:6] %>%
as.matrix()%>%
rcorr()%>%
tidy() %>%
select(estimate) 

答案 2 :(得分:0)

使用 magrittr 中的%$%的简单解决方案:

library(Hmisc)
library(magrittr)
mt <- matrix(1:10, ncol=2)

mt %>% rcorr(type="pearson") %$% P[2]
[1] 0