/ / Agregar na.omit como argumento en una función - r, na

Agregue na.omit como argumento en una función - r, na

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 № 1

Sus 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?