l申请Fisher精确检验[一式两份]

ykejflvf  于 2023-05-26  发布在  其他
关注(0)|答案(1)|浏览(221)

此问题已在此处有答案

Automated formula construction(2个答案)
R input names from a character vector to a function formula statement(1个答案)
Is there a better alternative than string manipulation to programmatically build formulas?(1个答案)
9天前关闭
我在R中有一个 Dataframe df,其中包含分类变量:变量的列名是‘A’、‘B’、‘C’,另一个分类变量是‘gene’
我想在R中运行pairwise fisher exact test。当我像这样一个接一个地运行它时:

A <-  xtabs(~ A + gene, data = df)
pairwise_fisher_test(A ,p.adjust.method = 'fdr')

B <-  xtabs(~ B + gene, data = df)
pairwise_fisher_test(B ,p.adjust.method = 'fdr')

C <-  xtabs(~ C + gene, data = df)
pairwise_fisher_test(C ,p.adjust.method = 'fdr')

这工作!!!
现在我试着像这样使用lapply:

vec <- ('A','B','C')
lapply(vec,function(x){
  xtabs(~ x + gene, data = df)
  pairwise_fisher_test(xtabs(~ x + gene, data = df) , p.adjust.method = 'fdr')
})

我得到这个错误:

Error in model.frame.default(formula = ~x + gene, data = df): variable lengths differ (found for 'gene')

我做错了什么??

km0tfn4u

km0tfn4u1#

我找到解决办法了。实际上在lapply中,我传递公式的方式是错误的。以下是正确的方法:

vec <- c('A', 'B', 'C')

lapply(vec, function(x) {
  formula <- as.formula(paste("~", x, "+ gene"))
  table <- xtabs(formula, data = df)
  pairwise_fisher_test(table, p.adjust.method = 'fdr')
})

这里,我们使用as.formula()通过将变量x与字符串“gene”组合来创建公式对象。这样,公式就被正确地构造并传递给xtabs()pairwise_fisher_test()

相关问题