0

我有以下功能:

Fisher.test <- function(p) {
   Xsq <- -2*sum(log(p), na.rm=TRUE)
   p.val <- 1-pchisq(Xsq, df = 2*length(p))
   return(p.val)
}

我猜测该命令na.rm=TRUE正在处理NA我的数据。但是,当我使用简单值测试函数时,行为不是预期的。例如:

Fisher.test(c(0.1,0.4,0.1,NA))
[1] 0.199279


Fisher.test(c(0.1,0.4,0.1))
[1] 0.08705891

为什么在第一个选项中我没有得到与第二个相同的结果?应该na.rm=TRUE删除NA??

非常感谢

4

1 回答 1

2

因为这两个向量的长度不同。如果你只是想过滤掉NAs 你可以使用sum(!is.na(p))而不是length(p),但是因为log它可以产生一个NaN负值,它也会被你过滤掉sum,我会sum(p >= 0, na.rm = T)改用(或者只是sum(!is.na(log(p)))R自己弄清楚细节):

Fisher.test <- function(p) {
   Xsq <- -2*sum(log(p), na.rm=TRUE)
   p.val <- 1-pchisq(Xsq, df = 2*sum(p >= 0, na.rm = T))
   return(p.val)
}
于 2013-07-09T16:48:09.727 回答