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>
我有一个数据框,我需要为其中的每一列应用 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>