通过迭代在R中对不同组进行t检验

时间:2014-03-31 16:05:01

标签: r for-loop statistics

我有一组患者分数,例如:

 P1 <- c(7.81,6.93,7.11)
 P2 <- c(8.61,7.95,8.11)
 P3 <- c(8.41,7.65,7.01)
 ....etc

我有一大群健康人得分如下:

 HC <- c(5.22,4.87,6.93,5.27,6.01,4.55,.....etc)

我在一个载体中列出了患者的姓名:

 patients <- c('P1','P2','P3',....etc)

我正在尝试针对健康对照组对每个患者评分进行t检验。我写了:

 for (i in patients){t.test(patients[i],HC)}

我期待R将一系列t-tests的结果打印到控制台,但它告诉我:

 Error in t.test.default(patients[i], HC) : 
 not enough 'x' observations
 In addition: Warning message:
 In mean.default(x) : argument is not numeric or logical: returning NA

我只需要在数据上获得一些P值,并认为这可能是一个简单的语法问题,但对R没有多大作用,似乎无法找到快速答案。任何帮助都会很棒?

2 个答案:

答案 0 :(得分:1)

对包含实际向量的list使用patients,而不是向量的名称:

> patients <- list(P1, P2, P3)
> for (i in patients){print(t.test(i,HC)$p.value)}
[1] 0.005015573
[1] 0.0002672035
[1] 0.00899473

答案 1 :(得分:0)

试试这个:for (i in patients){t.test(get(i),HC)}

问题是i在你的病人载体中循环并返回一个角色。 R不知道如何处理角色'P1'get告诉R在环境中查找名为'P1'的对象。