-3

我有超过5000个数据集,我想找到在 R 中使用 Fisher 精确测试的 p 值。它们保存在csv文件中,看起来像这样;

100 5000 400 500
250 400  600 400


... ... ... ...

其中每一行代表一个列联表。现在,我不得不一次做一张应急表,这将花费我很长时间。

到目前为止,我使用此代码 alltables<-read.table("untitled1.csv") ##读取我的数据 apply(alltables,1, function(x) fisher.test(matrix(x,nr=2))$p 。价值)

但随后我收到错误“fisher.test 中的错误(矩阵(x,nr = 2)):'x' 必须至少有 2 行和列”

4

1 回答 1

0

您可以执行以下操作。但是由于您并没有真正给出可重现的示例,因此我首先创建了一些玩具数据:

set.seed(1)
print(dat <- matrix(rbinom(n = 40, size = 1000, prob = 0.5), ncol = 4))
#      [,1] [,2] [,3] [,4]
# [1,]  500  526  494  505
# [2,]  497  500  512  493
# [3,]  480  488  500  512
# [4,]  464  513  498  497
# [5,]  527  503  518  508
# [6,]  504  517  511  483
# [7,]  519  493  522  471
# [8,]  486  490  497  507
# [9,]  492  499  475  509
#[10,]  530  486  488  501

# Function to be applied row-wise
rowFisher <- function(x, ...) {
  return(fisher.test(matrix(x, nrow = 2, ...))$p.value)
}

# Apply the function row-wise
apply(dat, 1, rowFisher)
# [1] 0.7557946 0.6548804 0.9641424 0.2603181 0.7912598 0.3729036 0.5916955 0.9283668 0.5585135
#[10] 0.2111895

编辑我没有看到你的评论。但这应该可以解决问题。如果没有,可能您的数据中某处有一些NAs 或其他非数字值。

于 2014-07-09T07:50:23.850 回答