我正在对大量列联表进行fisher精确检验,并将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
现在我可以模拟pvals了:
result <- fisher.test(data, simulate.p.value = TRUE, B = 1e5)
但我恐怕需要大量的模拟才能得到准确的结果,因为我的pval在某些情况下可能非常小。
因此,我的问题是否有某种方法可以先发制人地检查列联表是否太复杂而无法精确计算?在这些情况下,我可以切换到使用大量的模拟与B=1e10或其他。或者至少跳过那些值为"NA"的表,这样我的工作就完成了?
当fisher.test
失败时,您可以使用tryCatch
来获得所需的行为?比如:
tryCatchFisher<-function(...){
tryCatch(fisher.test(...)$p.value,
error = function(e) {'too big'})
}