我正在尝试在多个数据帧上将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
谢谢。
答案 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