Tengo la siguiente lista de valores p
pval.list <- list(list(a=c(0.05, 0.0001, 0.32, 0.45), b=c(0.1,0.12,0.01,0.06), c=c(0.1,0.12,0.01,0.06), d=c(0.01,0.02,0.03,0.04)),
list(e=c(0.04, NA, 0.232, 0.245), f=c(0.05, 0.01, 0.22, 0.54), g=c(0.005, 0.1, 0.032, 0.045)),
list(h=c(0.03, 0.01, NA, 0.4), i=c(0.5, 0.0001, 0.132, 0.045), j=c(0.005, 0.0001, 0.0032, 0.045), k=c(0.5, 0.1, 0.932, 0.545)),
list(l=c(0.022, NA, 0.32, 0.45), m=c(0.0589, 0.0001, NA, 0.0045)),
list(n=c(0.051, 0.01, 0.32, 0.45), o=c(0.05, 0.0001, 0.32, 0.45), p=c(0.05, 0.0001, 0.32, 0.45), q=c(0.05, 0.0001, NA, 0.45)),
list(r=c(NA, 0.001, 0.32, 0.45), s=c(0.05, 0.0001, NA, 0.45), t=c(0.05, 0.0001, 0.32, 0.45)))
Estoy tratando de aplicar una función (ver más abajo) a esta lista:
Fisher.test <- function(p) {
Xsq <- -2*sum(log(p))
p.val <- 1-pchisq(Xsq, df = 2*length(p))
return(p.val)
}
Siguiendo las indicaciones de @ G.Grothendieck, he usado este comando: lapply(lapply(pval.list, Reduce, f = cbind), apply, 1, Fisher.test)
sin embargo, cuando faltan valores en la lista, el enfoque no funciona. He intentado incorporar na.omit
como argumento para lapply
pero no soluciona el problema.
Debo añadir na.omit
como un argumento en Fisher.test
¿función?
Gracias
Respuestas
1 para la respuesta № 1Sus NA se producen en sum
. Si pasas el argumento na.rm=TRUE
, usted ganó "t no tiene NA en su resultado:
Xsq <- -2*sum(log(p), na.rm=TRUE)
Podrías hacer un na.rm
argumento para Fisher.test
, y pase verdadero o falso desde lapply
, pero cuando tu siempre Si desea excluir NA, solo debe establecer el argumento en la función.
Llamando la función en tus valores de p:
lapply(lapply(pval.list, Reduce, f = cbind), apply, 1, Fisher.test)
da:
[[1]]
[1] 1.953968e-03 2.999509e-05 5.320831e-04 1.339104e-02
[[2]]
[1] 0.0007878665 0.0317662968 0.0457435481 0.1146067577
[[3]]
[1] 8.982382e-03 3.055250e-08 4.719676e-02 5.094879e-02
[[4]]
[1] 0.009911091 0.001021034 0.684618971 0.014584426
[[5]]
[1] 2.357950e-03 6.135981e-11 5.543601e-01 6.038488e-01
[[6]]
[1] 6.235072e-02 3.470933e-09 6.016501e-01 5.708789e-01
Todos los valores de NA ahora se eliminan antes de calcular la suma. ¿Hace esto lo que quieres?