R - 对数据框中的每一列使用 Batlett 的测试函数

R - Using Batlett's test function for each column in a data frame

我有一个数据框,我需要为其中的每一列应用 bartlett.test() 函数。如果可能的话,我需要使用 apply()sapply() 函数 运行 它。

我的示例数据如下:

df <- data.frame(ENSG00000000003 = c(10, 50, 30, 40), ENSG00000000419 = c(20, 60, 100, 24), ENSG00000000457 = c(1, 10, 20, 70), group = c("yes","no","no","yes"))
rownames(df) <- c("sample01", "sample02", "sample03", "sample04")
df
         ENSG00000000003 ENSG00000000419 ENSG00000000457 group
sample01              10              20               1   yes
sample02              50              60              10    no
sample03              30             100              20    no
sample04              40              24              70   yes

运行 对于单个列,我的代码是:

pvalue <- bartlett.test(ENSG00000000003 ~ group, df)

pvalue

    Bartlett test of homogeneity of variances

data:  ENSG00000000003 by group
Bartlett's K-squared = 0.10672, df = 1, p-value = 0.7439

我的预期输出将在我的数据框的最后一行中包含 Bartlett 测试 p 值。

这里有一个使用lapply()的方法:

res <- lapply(df[,-4], bartlett.test, df$group)
ps  <- sapply(res, getElement, "p.value")
df  <- rbind(df, pval=c(ps, NA))
df
         ENSG00000000003 ENSG00000000419 ENSG00000000457 group
sample01      10.0000000      20.0000000       1.0000000   yes
sample02      50.0000000      60.0000000      10.0000000    no
sample03      30.0000000     100.0000000      20.0000000    no
sample04      40.0000000      24.0000000      70.0000000   yes
pval           0.7439055       0.1417199       0.1950732  <NA>

这是使用包的另一种方式:

library(matrixTests)
ps <- col_bartlett(df[,-4], df$group)$pvalue
df <- rbind(df, pval=c(ps, NA))
df
         ENSG00000000003 ENSG00000000419 ENSG00000000457 group
sample01      10.0000000      20.0000000       1.0000000   yes
sample02      50.0000000      60.0000000      10.0000000    no
sample03      30.0000000     100.0000000      20.0000000    no
sample04      40.0000000      24.0000000      70.0000000   yes
pval           0.7439055       0.1417199       0.1950732  <NA>