我有一个p值的数据框。除了p值之外,它还有一些零条目。
data
V1 V3 V4 V5 V6 V7
1 ADAM32 0.001 0 0 0 0
2 ADAM32 0.001 0.65 0.001 0.001 0.65
3 ADAM32 0.65 0 0 0 0
4 CCL5 0.000491 0.000491 0.000491 0 0
5 CILP2 0.500000024 0.500000024 0.500000024 0 0
6 EPHB3 0.000562 0.000562 0.000562 0.000562 0.000562
7 EPHB3 0.000562 0 0 0 0
8 GUCA1A 0.002006 0.602006 0.002006 0.602006 0.002006
9 GUCA1A 0.602006 0 0 0 0
10 HSPA6 0.000322 0.000322 0.000322 0.000322 0.000322
11 HSPA6 0.000322 0 0 0 0
12 MAPK1 0.002 0.002 0.002 0 0
我使用以下代码来应用Fisher的方法来组合每行的p值。
## Fisher's Method
Fisher.test <- function(p) {
Xsq <- -2*sum(log(p))
p.val <- pchisq(Xsq, df = 2*length(p), lower.tail = FALSE)
return(c(Xsq = Xsq, p.value = p.val))
}
for(k in 1 : nrow(data))
{
p <- as.numeric(data[j,-1])
fisher <- Fisher.test(p)
print(fisher)
}
我想跳过零添加到行和,因为它会在p值的对数转换后导致无限值。
答案 0 :(得分:2)
使用apply
进行更简洁的撰写:
apply(df, 1, function(u) {x=as.numeric(u[-1]);Fisher.test(x[x!=0])})
在前4行返回:
# [,1] [,2] [,3] [,4]
#Xsq 13.81551 4.316966e+01 0.8615658 4.571440e+01
#p.value 0.00100 4.637400e-06 0.6500000 3.374549e-08
即使最好的方法是处理你的函数的情况下给出0
的向量(并且还有0
)。