R中crosstable调用fisher.test报错:如何增大工作区大小?
解决crosstable中Fisher精确检验的FEXACT error 6问题
方法1:通过
test_args参数针对特定变量传递workspace参数
crosstable的test_args参数支持为指定变量的检验函数传递额外参数。针对报错的diagnostico_estadio变量,可按如下方式设置:crosstable(database, by = variable, test = list(diagnostico_estadio = "fisher"), test_args = list(diagnostico_estadio = list(workspace = 2e7)))示例中
2e7是推荐的初始workspace值,可根据实际情况调整(比如增大至5e7)。注意该参数单位为4字节整数,值过大会占用过多内存,需合理设置。方法2:自定义Fisher检验函数并指定给目标变量
使用purrr::partial包装fisher.test并预设workspace参数,再让crosstable对目标变量使用该自定义函数:library(purrr) # 包装fisher.test,固定workspace参数 custom_fisher <- partial(fisher.test, workspace = 2e7) # 在crosstable中指定目标变量使用自定义检验函数 crosstable(database, by = variable, test = list(diagnostico_estadio = custom_fisher))方法3:全局替换所有分类变量的Fisher检验参数(谨慎使用)
若希望所有需执行Fisher检验的变量都使用更大的workspace,可直接传递自定义函数给test参数,但此操作会覆盖crosstable默认的检验逻辑(比如原本用卡方检验的变量也会改用Fisher):crosstable(database, by = variable, test = function(x, y) fisher.test(x, y, workspace = 2e7))
错误原因说明:
你遇到的FEXACT error 6是因为Fisher精确检验处理较大列联表时,默认分配的内存工作区(workspace)不足以容纳计算所需的中间数据。手动增大workspace参数可为检验分配更多内存,从而解决该报错。
内容的提问来源于stack exchange,提问作者Jorge A
相关产品推荐
相关产品推荐

