如何在R中的每一行上执行操作(apply()?)

时间:2015-04-24 13:39:03

标签: r statistics

所以我有下表:

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()函数,但它对我不起作用。

1 个答案:

答案 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