如何对数据帧中的多列进行循环Bartlett检验和Kruskal检验? [英] How to loop Bartlett test and Kruskal tests for multiple columns in a dataframe?

查看:0
本文介绍了如何对数据帧中的多列进行循环Bartlett检验和Kruskal检验?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有以下数据框我正在调用";test";,并且我正在尝试对每个";metab";与诊断&p>运行Bartlett‘s检验和Kruskal-Wallis检验。

> test

Index   tube.label  age gender  diagnosis   metab1  metab2  metab3  metab4  metab5  metab6
1            200    73  Male    Cancer         6    1.5         2      5       8    1.5
2            201    71  Male    Healthy        6    1.5         2    11.5     50    1.5
4            202    76  Male    Adenoma        2    1.5         2      5       8    1.5
7            203    58  Female  Cancer         2    1.5         2    1.5     2.5    1.5
9            204    73  Male    Cancer         2    1.5         2    1.5       8    1.5
12           205    72  Male    Healthy        6    1.5    17.8272  13.5    184.2   4.5
13           206    46  Female  Cancer     30.0530  1.5        2    21.2    16.6    4.5
14           207    38  Female  Healthy        6    1.5        2    12.494  31.59   1.5
15           208    60  Male    Cancer         6    1.5        2    13.2    53.2    4.5
16           209    72  Female  Cancer         6    1.5        2    1.5        8    1.5
17           210    72  Male    Adenoma        6    1.5        2    22.829  102.44  9.069
18           211    52  Male    Cancer         6    1.5        2    1.5        8    1.5
19           212    64  Male    Healthy        6    1.5        2    1.5        8    1.5
20           213    68  Male    Cancer         6    1.5        2    26.685  40.9    4.5
21           214    60  Male    Healthy    24.902   1.5   42.443    22.942  498.5   4.5
23           215    70  Female  Healthy         6   1.5        2    1.5     19.908  4.5
24           216    42  Female  Healthy         6   1.5        2    1.5      17.7   1.5
25           217    72  Male    Inflammation    6   1.5        2    1.5         8   1.5
26           218    71  Male    Healthy        51   1.5        2    41.062  182.2   11.340
27           219    51  Female  Inflammation    2   1.5        2    1.5         8   1.5

我可以单独运行它们,它为我提供了适当的值:

bartlett.test(metab1 ~ diagnosis, data = test)

    Bartlett test of homogeneity of variances

data:  metab1 by diagnosis
Bartlett's K-squared = 5.1526, df = 3, p-value = 0.161
kruskal.test(metab1 ~ diagnosis, data = test)

    Kruskal-Wallis rank sum test

data:  metab1 by diagnosis
Kruskal-Wallis chi-squared = 4.3475, df = 3, p-value = 0.2263

但是,当我尝试运行for循环时(我有100多个循环要运行),我一直收到以下错误:

Bartlett错误:

testcols <- colnames(test[6:ncol(test)])
for (met in testcols){
  bartlett.test(met ~ diagnosis, data = test)
}

>Error in model.frame.default(formula = met ~ diagnosis, data = test) : 
  variable lengths differ (found for 'diagnosis')

Kruskal-Wallis错误:

for(met in testcols){
  kruskal.test(met ~ diagnosis,data = test)
}

>Error in model.frame.default(formula = met ~ diagnosis, data = test) : 
  variable lengths differ (found for 'diagnosis')

我应该使用其他东西吗?感谢您的帮助!

推荐答案

尝试使用reformulate创建要应用的公式:

cols <- names(test)[6:ncol(test)]

all_test <- lapply(cols, function(x) 
                    bartlett.test(reformulate("diagnosis", x), data = test))

您可以使用kruskal.test执行相同的操作。

这篇关于如何对数据帧中的多列进行循环Bartlett检验和Kruskal检验?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆