2013-03-26 3 views
2

Я выполнил тест wilcox, и теперь я хочу извлечь p.value в список или матрицу.Как получить список pvalues?

DF <- data.frame(A1=sample(1:9, 10, T), 
        A2=sample(1:9, 10, T), 
        A3=sample(1:9, 10, T), 
        B1=sample(1:9, 10, T), 
        B2=sample(1:9, 10, T), 
        B3=sample(1:9, 10, T)) 


sampA <- DF[,grep('A', names(DF))] # Sample with columns A 
sampB <- DF[,grep('B', names(DF))] # Sample with columns B 


lapply(1:nrow(DF), function(i){ 
    wilcox.test(as.numeric(sampA[i,]), as.numeric(sampB[i,]), exact=FALSE) 
}) 

В результате моего Wilcox теста для каждой строки выглядит следующим образом: Я хочу знать, как я могу получить p.value в виде списка или матрицы для экспорта в Excel файл? [[1]]

Wilcoxon rank sum test with continuity correction 

data: as.numeric(sampA[i, ]) and as.numeric(sampB[i, ]) 
W = 3, p-value = 0.6579 
alternative hypothesis: true location shift is not equal to 0 


[[2]] 

    Wilcoxon rank sum test with continuity correction 

data: as.numeric(sampA[i, ]) and as.numeric(sampB[i, ]) 
W = 0, p-value = 0.0722 
alternative hypothesis: true location shift is not equal to 0 


[[3]] 

    Wilcoxon rank sum test with continuity correction 

data: as.numeric(sampA[i, ]) and as.numeric(sampB[i, ]) 
W = 6, p-value = 0.6579 
alternative hypothesis: true location shift is not equal to 0 

ответ

5

Просто добавьте $p.value извлечь свой p.value из вашего wilcox.test объекта:

lapply(1:nrow(DF), function(i){ 
    wilcox.test(as.numeric(sampA[i,]), as.numeric(sampB[i,]), exact=FALSE)$p.value 
}) 

Что дает:

[[1]] 
[1] 1 

[[2]] 
[1] 1 

[[3]] 
[1] 0.8247781 

[[4]] 
[1] 0.8247781 

Используя sapply вместо lapply вы должны получить вектор вместо списка, который может быть легче манипулировать.

sapply(1:nrow(DF), function(i){ 
    wilcox.test(as.numeric(sampA[i,]), as.numeric(sampB[i,]), exact=FALSE)$p.value 
}) 

# [1] 1.0000000 1.0000000 0.8247781 0.8247781 0.0765225 0.8247781 1.0000000 
# [8] 0.8247781 0.2682859 0.0765225 
+0

+1 для того, чтобы избить меня до удара на ~ 60 секунд (и, очевидно, такая же мысль относительно 'sapply!) :-) –

+0

Большое спасибо U :) –

2

Используйте sapply и ссылаться на имя p.value ...

sapply(1:nrow(DF), function(i){wilcox.test(as.numeric(sampA[i,]), as.numeric(sampB[i,]), exact=FALSE)$p.value}) 

#[1] 0.8247781 0.0765225 0.8247781 1.0000000 0.2682859 0.6625206 1.0000000 
#[8] 0.1211833 0.5065552 0.8247781 

Это возвращает вектор, а не список (я обычно векторы легче обрабатывать, например, потому что вы можете 't проиндексируйте список, используя mylist[[1:5]], но вы можете сделать myvector[1:5], но это личное предпочтение

+0

+1 для почти того же ответа тоже :) – juba

Смежные вопросы