我有一个类似于以下内容的n行数据框(某些额外的列包含未列出的其他信息):
R1counti R1counto R2counti R2counto R1 R2
sample1 100 100 1000 1000 1 1
smaple2 50 100 50 50 0.5 1
对于每一行,我想进行一次费舍尔的精确测试,以确定R1比率是否与R2比率显着不同(并最终获得调整后的p值)
所需的输出(计数列仍包含在out中):
R1 R2 pval
sample1 1 1 1
sample2 0.5 1 0.05
我认为我可以做类似的事情:
dataframe$p-val <- with(dataframe, p-val <- fisher.test(R1, R2, alternative= "two.sided"))
但是我得到一个错误:
FEXACT error 40.
Out of workspace.
也许我没有正确处理这种情况。有什么建议吗?有什么建议吗?我可以执行像这样的渔民测试吗?
答案 0 :(得分:3)
对于数据集的每一行,您需要构建一个矩阵(即2 x 2列联表)并将该矩阵传递给fisher.test
命令。
df <- read.table(text="
R1counti R1counto R2counti R2counto R1 R2
sample1 100 100 1000 1000 1 1
sample2 50 100 50 50 0.5 1
", header=T, row.names=1)
apply(df, 1,
function(x) {
tbl <- matrix(as.numeric(x[1:4]), ncol=2, byrow=T)
fisher.test(tbl, alternative="two.sided")$p.value
})
# sample1 sample2
# 1.00000000 0.01209383