Как применить цикл for и t-тест к набору данных? - PullRequest
0 голосов
/ 18 апреля 2019

Я пытаюсь применить цикл for к кадру данных в R, используя его, чтобы взять номер строки, который будет использоваться в t-тесте, вместе с указанными индексами столбцов.Когда я запускаю код, который у меня есть, он принимает только последнее значение, указанное в цикле for. Как это исправить? (извините, я новичок)

Это мой код:
x представляет набор данных

for(i in 1:nrow(x)){
    test<- t.test(x[i, 1:5], x[i, 6:10])
    return(test$p.value)
  }

Я хочучтобы выполнить t-тест в каждой строке, используя i (в качестве номера строки) и указанные индексы столбцов в качестве входных данных, чтобы предоставить мне значение p из каждого теста

Ответы [ 2 ]

0 голосов
/ 18 апреля 2019

Я думаю, что для использования return вы должны определить функцию (на самом деле я удивлен, что вы не получите ошибку).Что происходит, так это то, что цикл выполняет все тесты так, как вы хотите, но перезаписывает их в одну и ту же переменную test, поэтому в конце вы получите только последний результат.

Редактировать: На самом деле я проверил, и return должен позволить вам выйти на первой итерации, получая, таким образом, только результат первого теста.

Один простой способ исправить это - создать, например,, вектор и затем добавьте каждый новый результат в ту же позицию, что и соответствующая строка:

test <- c()
for(i in 1:nrow(x)){
    test[i] <- t.test(x[i, 1:5], x[i, 6:10])
}

Обратите внимание, что добавление к пустому вектору / списку довольно дорого, так как его конечная длина увеличивается, поэтому вы можете захотетьИнициализируйте его с NA, длина которых равна числу строк в кадре данных:

test <- rep (NA,nrow(x))
0 голосов
/ 18 апреля 2019

Это происходит потому, что вы все время перезаписываете test. Если вы действительно хотите использовать для этой цели цикл for и впоследствии извлечь p-значения, это будет лучше работать:

set.seed(1)
x <- matrix(sample(1:100,100), nrow = 10)

test = list()
a = 0

for(i in 1:nrow(x)){
  a <- a + 1
  test[[a]] <- t.test(x[i, 1:5], x[i, 6:10])
}

lapply(test, "[[", "p.value")

Однако, используя apply, способ, предложенный Надизаном, гораздо более предпочтителен в этом случае.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...