2016-11-06 5 views
0

Я хотел бы применить тест T в R внутри циклаLooping статистические тесты в R

Groups Length Size Diet place 
A 2.4048381 0.7474989 1.6573392 334.3273456 
A 2.72500485 0.86392165 1.8610832 452.5593152 
A 1.396782867 0.533330367 0.8634525 225.5998728 
B 1.3888505 0.46478175 0.92406875 189.9576476 
B 1.38594795 0.60068945 0.7852585 298.3744962 
B 2.53491245 0.95608005 1.5788324 303.9052525 

Я попытался этот код с петлей, но он не работает:

for (i in 2:4){ 
    t.test(table[,c(i)] ~ table$Groups, conf.level = 0.95) 
} 
Can

кто поможет я с этим? Спасибо!

+0

Я на самом деле не получаю сообщение об ошибке, даже если мой кадр данных называется 'table'. Но, как правило, [не используйте функцию R как имена переменных] (http://stackoverflow.com/questions/11308367/error-in-my-code-object-of-type-closure-is-not-subsettable) как @ zheyuan-li сказал. Может быть, сообщите нам об ошибке, которую вы получите от R. –

+1

Нет сообщения об ошибке, но и это ничего не дает heheheh – Jontexas

ответ

1

Ваш код вычисляет 4 t-теста, но результаты теряются, потому что вы ничего не делаете с ними. Попробуйте следующее:

info <- read.table(header=TRUE, text="Groups Length Size Diet place 
       A 2.4048381 0.7474989 1.6573392 334.3273456 
       A 2.72500485 0.86392165 1.8610832 452.5593152 
       A 1.396782867 0.533330367 0.8634525 225.5998728 
       B 1.3888505 0.46478175 0.92406875 189.9576476 
       B 1.38594795 0.60068945 0.7852585 298.3744962 
       B 2.53491245 0.95608005 1.5788324 303.9052525") 

results <- list() 
for (i in 2:4){ 
    results[[i]] <- t.test(info[,i] ~ info$Groups, conf.level = 0.95) 
} 

print(results) 

При взаимодействии с REPL/консоли, введя функцию t.test будет вычислять результаты и вернуть их. Консоль выведет все, что возвращается. В сценариях, которые вы source, функция t.test вернет результаты, но они не будут напечатаны. Вот почему я помещал их в список и печатал список позже.

Btw, я сохранил вашу информацию как info не как table. R отлично справится с именами переменных, которые также являются именами функций, но время от времени вам будет трудно прочитать сообщения об ошибках, поэтому избегайте переименования переменных table или matrix или c или df.

+0

Отличное объяснение @Bernhard! Он работал очень хорошо, и поскольку у него есть несколько команд, я могу добавить больше колонок и данных :) – Jontexas

1

apply Использование функции вы также можете сделать:

res<- cbind(
do.call(rbind,apply(info[,-1],2,function(cv)t.test(cv ~ info$Groups, conf.level = 0.95) 
        [c("statistic","parameter","p.value")])) 
, 
t(apply(info[,-1],2,function(cv)unlist(t.test(cv ~ info$Groups, conf.level = 0.95) 
        [c("conf.int","estimate")]))) 
) 
res 


> res 
     statistic parameter p.value conf.int1 conf.int2 estimate.mean in group A estimate.mean in group B 
Length 0.7327329 3.991849 0.5044236 -1.13263 1.943907 2.175542     1.769904     
Size 0.2339013 3.467515 0.8282072 -0.47739 0.5595231 0.714917     0.6738504    
Diet 0.9336103 3.823748 0.4056203 -0.7396173 1.468761 1.460625     1.096053     
place 0.9748978 3.162223 0.398155 -159.4359 306.2686 337.4955     264.0791 
Смежные вопросы