1

我有一个 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 值的对数转换后导致无限值。

4

1 回答 1

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

即使最好的方法是在你的函数中处理给定向量 with 0(并且也充满0)的情况。

于 2015-03-24T10:38:26.323 回答