Я пытаюсь написать код, который бы автоматически вычислял p-значение критерия Уилкоксона для нескольких сравнений.
Используемые данные: 2 набора данных с одинаковой информацией, представляющие две группы участников, выполнили одинаковые 5 задач, что означает, что каждая таблица содержит 5 столбцов (задач) и X строк с оценками задач.
data_17_18_G2 # first data set (in data.table format)
data_18_20_G2 # second data set (in data.table format)
Оба набора данных имеют идентичные имена столбцов, которые должны использоваться в W-тесте следующим образом:
wilcox.test(Group1Task1, Group2Task1, paired = F)
wilcox.test(Group1Task2, Group2Task2, paired = F)
и так далее. Входные данные (например, Grou1Task1) представляют собой два вектора оценок заданий (первый будет из data_17_18_G2, а другой из data_18_20_G2
Желаемый результат: таблица данных со столбцом p-значений. Проблема, с которой я столкнулся в том, что независимо от того, как я манипулировал пустыми объектами val1 и val2, во второй и третьей строках правильный размер «as.numeri c (unlist (data_17_18_G2 [, ..i]))» дает правильный вывод (a цифра c вектор) но его левый размер "val1 [i]" всегда возвращает только одно значение из вектора. Это дало мне представление о том, что главная проблема возникла на этапе создания пустого вектора, однако я не был способен решить эту проблему.
Пустые объекты:
result <- data.table(matrix(ncol=2))
val1 <- as.numeric() # here I also tried functions "numeric" and "vector"
val2 <- as.numeric()
res <- vector(mode = "list", length = 7)
Для l oop
for (i in 1:5) {
val1[i] <- as.numeric(unlist(data_17_18_G2[ , ..i]))
val2[i] <- as.numeric(unlist(data_18_20_G2[ , ..i]))
res[i] <- wilcox.test(val1[i], val2[i], paired = F)
result[i, 1] <- i
result[i, 2] <- res$p.value
}
Вывод:
Error in `[<-.data.table`(`*tmp*`, i, 2, value = NULL) :
When deleting columns, i should not be provided
1: В val1[i] <- as.numeric(unlist(data_17_18_G2[, ..i])) :
number of items to replace is not a multiple of replacement length
2: В val2[i] <- as.numeric(unlist(data_18_20_G2[, ..i])) :
number of items to replace is not a multiple of replacement length
3: В res[i] <- wilcox.test(val1[i], val2[i], paired = F) :
number of items to replace is not a multiple of replacement length
Альтернатива: Я изменил вторую и третью строки
for (i in 1:5) {
val1[i] <- as.numeric(data_17_18_G2[ , ..i])
val2[i] <- as.numeric(data_18_20_G2[ , ..i])
res[i] <- wilcox.test(val1[i], val2[i], paired = F)
result[i, 1] <- i
result[i, 2] <- res$p.value
}
и получил это
Error in as.numeric(data_17_18_G2[, ..i]) :
(list) object cannot be coerced to type 'double'
, что означает, что функция wilcox.test не может интерпретировать этот тип ввода.
Как я могу улучшить код, чтобы получить таблицу данных р-значение?