所以我有下表:
118.00 12.00 25.00 161.00 26.00 2.00 9.00 47.00
76.00 218.00 1.00 21.00 11.00 64.00 0.00 9.00
53.00 124.00 2.00 51.00 86.00 25.00 25.00 0.00 20.00 14.00
212.00 104.00 38.00 46.00
我按以下方式解析它:
data2 <- read.table('to_r.txt', fill=T)
然后我想对每一行做些什么。更具体地说,将其转换为列联表(2xN矩阵)并执行精确的Fisher测试。我没有问题手动提取一行并做我想要的。
myrow = na.omit(as.numeric(as.vector(data2[4,])))
fisher.test(matrix(myrow, nrow = 2, byrow=TRUE))
但是我想问一下如何迭代表的各行?因此函数将输出每行的静态。我尝试过apply()函数,但它对我不起作用。
答案 0 :(得分:2)
您可以使用apply
生成Fisher测试结果列表:
tests <- apply(data2, 1, function(x) fisher.test(matrix(na.omit(x), nrow=2, byrow=TRUE)))
然后,您可以使用标准列表索引
访问特定于行的测试tests[[4]]
# Fisher's Exact Test for Count Data
#
# data: matrix(na.omit(x), nrow = 2, byrow = TRUE)
# p-value = 0.0003517
# alternative hypothesis: true odds ratio is not equal to 1
# 95 percent confidence interval:
# 1.467850 4.151196
# sample estimates:
# odds ratio
# 2.461669
如果您想要每行的p值向量,您可以尝试:
apply(data2, 1, function(x) fisher.test(matrix(na.omit(x), nrow=2, byrow=TRUE))$p.value)
# [1] 0.5809118696 0.0803221157 0.0113166667 0.0003516986