当R中的卡方检验产生警告时,如何执行Fisher精确检验`fisher.test()`

时间:2015-03-18 18:20:06

标签: r function statistics compiler-warnings chi-squared

我在R中有一个名为df的数据框。对于恰好是因子的数据框中的每个变量,我想要执行根据主题的性别分层的卡方检验并保存得到的p值。我已经编写了代码来执行此操作,如下所示。

sapply(df, function(x) if(class(x) == "factor") { chisq.test(table(df$Sex, x))$p.value } )

问题是,当我运行此代码时,我得到以下内容:

There were 50 or more warnings (use warnings() to see the first 50)
warnings()
Warning messages:
1: In chisq.test(table(df$Sex, x)) : Chi-squared approximation may be incorrect

如果通过卡方检验生成警告,如何修改原始代码以执行Fisher精确检验fisher.test()?我不确定如何让代码识别何时发生警告。谢谢!

1 个答案:

答案 0 :(得分:3)

在这些方面使用tryCatch可能会有所帮助:

dat = data.frame(x=c(1,0,1,0,1,0,1,1),y=c("A","B","B","A","A","B","A","A"))

#this table is sure to throw a warning
tab = table(dat)
chisq.test(tab)
fisher.test(tab)


#Important part
tryCatch({
  chisq.test(tab)$p.value
}, warning = function(w) {
  fisher.test(tab)$p.value
})

编辑: 如果还希望通过抛出NA来绕过错误,则可能会修改上述内容:

tryCatch({
  chisq.test(tab)$p.value
}, warning = function(w) {
  fisher.test(tab)$p.value
}, error = function(e) {
  NA
})