Вот пример набора данных из вашего поста:
dataset <- data.frame(sample_01=c(100,50,90,40),
sample_02=c(120,49,87,43),
sample_02=c(110,48,80,42)
)
rownames(dataset) <- c("untreated", "drug1", "drug2", "drug3")
Ваш цикл выглядит нормально, требуется только две модификации:
1-й, вы должны начать цикл с 2
ине из 1
, так как вы не хотите сравнивать первую строку с самим собой (без обработки).
2-й, вы должны хранить свои результаты в списке, а не перезаписывать переменную с именем "results", потому что тогда вы будетепереписывайте его каждый раз внутри цикла и в конце получите ответ только для последней строки.
Вот модификации:
results <- list()
for (i in 2:nrow(dataset)) {
x <- dataset["untreated",]
y <- dataset[i,]
results[[i-1]] <- t.test(x,y)
}
Теперь вы можете получить p-значения:
> sapply(results, getElement, "p.value")
[1] 0.008337497 0.033407617 0.006107201
В качестве альтернативы, чтобы упростить задачу, вы можете рассмотреть возможность использования пакета:
library(matrixTests)
> row_t_welch(dataset[-1,], dataset["untreated",])
obs.x obs.y obs.tot mean.x mean.y mean.diff var.x var.y stderr df statistic pvalue conf.low conf.high alternative mean.null conf.level
drug1 3 3 6 49.00000 110 -61.00000 1.000000 100 5.802298 2.039996 -10.513075 0.008337497 -85.50204 -36.497961 two.sided 0 0.95
drug2 3 3 6 85.66667 110 -24.33333 26.333333 100 6.489307 2.985027 -3.749758 0.033407617 -45.04393 -3.622734 two.sided 0 0.95
drug3 3 3 6 41.66667 110 -68.33333 2.333333 100 5.840472 2.093283 -11.699968 0.006107201 -92.41964 -44.247023 two.sided 0 0.95