t-test se bloquea aplica-loop (editado)

n respuesta a los útiles comentarios, he editado la pregunta original (donde supuse que un bucle for y un bucle apply dan resultados diferentes).

Estoy usando R para ejecutar una gran cantidad de pruebas t de 2 grupos, usando la entrada de una tabla delimitada. Siguiendo las recomendaciones de aquí y de otros lugares, probé 'for-loops' y 'apply' para lograrlo. Para la prueba t 'normal', ambos funcionan bien y dan los mismos resultados. Sin embargo, para una prueba t pareada, la apariencia parece funcionar mientras que el bucle aplicar no lo hace. Más tarde, descubrí que ambos bucles sufren el mismo problema (ver a continuación), pero los bucles for tratan la situación con mayor gracia (solo un ciclo del bucle devuelve un resultado no válido) mientras que el bucle apply falla por completo.

Mi archivo de entrada tiene este aspecto: (la primera línea es una línea de encabezado, las líneas de datos tienen un nombre, 4 puntos de datos para el grupo 1 y 4 puntos de datos para el grupo 2):

header g1.1 g1.2 g1.3 g1.4 g2.1 g2.2 g2.3 g2.4
name1  0    0.5  -0.2 -0.2 -0.1 0.4 -0.3 -0.3
name2  23.2 24.4 24.5 27.2 15.5 16.5 17.7 20.0
name3  .....

y así sucesivamente (en general ~ 50000 líneas). La primera línea de datos (que comienza con name19 resultó ser la culpable.

Esta es la versión for-loop que funciona mejor (falla en la línea problemática pero trata correctamente todas las demás líneas):

table <- read.table('ttest_in.txt',head=1,sep='\t')
for(i in 1:nrow(table)) {
   g1<-as.numeric((table)[i,2:5])
   g2<-as.numeric((table)[i,6:9])
   pv <- t.test(g1,g2,paired=TRUE)$p.value
}

Esta es la versión 'aplicar' que causa problemas

table <- read.table('ttest_in.txt',head=1,sep='\t')
pv.list <- apply(table[,2:9],1,function(x){t.test(x[1:4],x[5:8],paired=TRUE)$p.value})

Una de las ~ 50000 líneas de datos es problemática porque las diferencias de todas las comparaciones por pares son idénticas, lo que en una prueba t emparejada da como resultado un valor p indefinido (esencialmente cero). El bucle de aplicación se bloquea con el error 'los datos son esencialmente constantes'. Para mí (como un novato de R), no parece ser una buena idea bloquear el script completo solo porque a la prueba t.test no le gusta una sola pieza de datos. En el ciclo for, esta línea de datos también genera un mensaje de error, pero el ciclo continúa y todas las otras pruebas t dan resultados correctos.

¿Hice algo fundamentalmente incorrecto? Este comportamiento esencialmente prohíbe el uso de bucles de aplicación para este tipo de análisis por lotes. ¿O hay una forma estándar de eludir este problema? ¿Por qué la prueba t simplemente no devuelve algo no válido para ese valor p en particular en lugar de rescatarlo?

Respuestas a la pregunta(8)

Su respuesta a la pregunta