如何避免 R 中 fisher.test 工作区错误

3

我正在对大量列联表进行费舍尔精确检验,并为生物信息学问题保存p值。其中一些列联表很大,因此我已经尽可能地增加了工作区域的大小;但是当我运行下面的代码时,我会得到一个错误:

result <- fisher.test(data,workspace=2e9)
LDSTP is too small for this problem. Try increasing the size of the workspace.

如果我增加工作区的大小,会出现另一个错误:

result <- fisher.test(data,workspace=2e10)
cannot allocate memory block of size 134217728Tb

现在我可以模拟p值:

result <- fisher.test(data, simulate.p.value = TRUE, B = 1e5)

但是我担心在某些情况下我的P值可能非常小,因此我需要大量的模拟才能得到准确的结果。

因此我的问题是,是否有办法事先检查一个列联表是否过于复杂而无法精确计算?在这些情况下,我可以使用大量的模拟,例如B=1e10。或者至少跳过那些带有“NA”值的表格,以便我的工作可以顺利完成?


更好地描述数据。 - IRTFM
每个测试的数据都是一个nx2的矩阵,其中整数范围从0到约300。矩阵的大小因测试而异:2x2、10x2、20x2等。我可以尝试猜测哪些矩阵会导致错误(如较大的矩阵),并估计这些矩阵的pval,但理想情况下应该有更简洁的解决方案。 - nak3c
1个回答

3
也许您可以使用tryCatch来获取所需的行为,当fisher.test失败时?也许可以尝试这样做:
tryCatchFisher<-function(...){
    tryCatch(fisher.test(...)$p.value,
    error = function(e) {'too big'})
    }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接