Невозможно применить t-тест для фрейма данных в R

Я склонен применять t-тест для каждой строки в моем фрейме данных, который представляет собой данные микромассива, сравнивая столбцы 2:13 и 14:67 по этому коду:

t_test = apply(Df, 1, function(x) { t.test(x[2:13], x[14:67])$p.value } )

Однако я получил эту ошибку:

Ошибка в if (stderr ‹ 10 * .Machine$double.eps * max(abs(mx), abs(my))) stop(данные практически постоянны): отсутствует значение там, где требуется TRUE/FALSE Кроме того: Предупреждающие сообщения: 1 : В mean.default(x): аргумент не является числовым или логическим: возвращается NA 2: В mean.default(y):

Я проверил, отсутствует ли какое-либо значение / не является числовым или нет, по некоторым советам по этим проблемам (похоже, что многие люди также столкнулись с этой проблемой) с помощью этого кода:

TRUE %in% is.character(Data_rma[2:13])  TRUE %in% is.character(Data_rma[14:67])
TRUE %in% is.na(Data_rma[2:13])  TRUE %in% is.na(Data_rma[14:67])

Ничего не пропущено, и все значения числовые. Я не знаю, в чем проблема с моей проблемой.

Большое тебе спасибо!

Я загрузил свой фрейм данных на Диск, чтобы вы могли попробовать. https://drive.google.com/file/d/1FE81HYaSTo7rEPG-qb-mdknPcpvebsWT/view?usp=sharing

Мой фрейм данных это нравится


person Lê Quốc Khang    schedule 18.02.2021    source источник


Ответы (1)


Это ошибка, которая возникает из-за того, что когда вы apply по строкам, вы будете получать векторы с 3 столбцами класса "character" и, следовательно, принуждать все числовые значения к символам. Затем t-тест запускается для символьных переменных и не проходит.

Правильный способ — сначала определить, какие столбцы являются числовыми, и применить тест к подмножеству исходных данных.

num_cols <- which(sapply(Data_rma, is.numeric))
i1 <- which(num_cols %in% 2:13)
i2 <- which(num_cols %in% 14:67)

t_test <- apply(Data_rma[num_cols], 1, function(x) {
  tryCatch(t.test(x[i1], x[i2])$p.value,
           error = function(e) e
  )
})

ok <- !sapply(t_test, inherits, "error")
all(ok)
#[1] TRUE

Код чтения данных

google_id <- "1FE81HYaSTo7rEPG-qb-mdknPcpvebsWT"
google_file <- sprintf("https://docs.google.com/uc?id=%s&export=download", google_id)
Data_rma <- read.csv(google_file)
person Rui Barradas    schedule 18.02.2021