T-тест для генов с использованием функции Apply в Dataframe

Я пытаюсь провести t.тест на двух фреймах данных.

Фреймы данных (которые я вырезал из data.frame) содержат данные, которые мне нужны, в строках 1:143. Я уже создал под-переменные, так как мне нужно было вычислить rowMeans.

> c.mRNA<-rowMeans(c007[1:143,(4:9)])
> h.mRNA<-rowMeans(c007[1:143,(10:15)])

Я просто пытаюсь запустить t.test для каждой строки, а затем построить p-значения в виде гистограмм. Я думал, что это сработает ...

Pvals<-apply(mRNA143.data,1,function(x) {t.test(x[c.mRNA],x[h.mRNA])$p.value})

Но я все время получаю ошибку?

Error in t.test.default(x[c.mRNA], x[h.mRNA]) : 
  not enough 'x' observations

У меня что-то не так в моем синтаксисе, и я не могу понять это, хоть убей!

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

      c.mRNA    h.mRNA
1    8.224342  8.520142
2    9.096665 11.762597
3   10.698863 10.815275
4   10.666233 10.972130
5   12.043525 12.140297

Я пробовал это ...

 pvals=apply(mRNA143.data,1,function(x) {t.test(mRNA143.data[,1],mRNA143.data[, 2])$p.value})

Но я могу сказать по своему сюжету, что я не нахожусь (сюжеты расположены по прямой линии).

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

Ozan147 19.08.2018 03:14

С помощью приведенного ниже кода я получаю один t-тест, повторяемый для всех 143 строк, вместо нового t-теста для данных в каждой строке. > apply(mRNA143.data, 1, function(x) t.test(mRNA143.data[1:143,1:1], mRNA143.data[1:143,2:2])$p.value)

Oars 19.08.2018 19:02

Мне удалось вычислить t.test для каждой строки. t.test.mRNA143.data<-apply(mRNA143.data, 1, t.test), как извлечь p-значения для построения графика?

Oars 19.08.2018 19:35
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
3
341
1

Ответы 1

Воспроизводимый пример будет иметь большое значение. Готовя его, вы могли понять, что пытаетесь разбить столбцы на подмножества на основе среднего значения, что на самом деле не имеет смысла.

Что вы хотите сделать, так это пройтись по строкам ваших данных, столбцам подмножества, принадлежащим определенной группе, повторить для второй группы и передать это в функцию t.test.

Вот как бы я это сделал.

group1 <- matrix(rnorm(50, mean = 0, sd = 2), ncol = 5)
group2 <- matrix(rnorm(50, mean = 5, sd = 2), ncol = 5)

xy <- cbind(group1, group2)

# this is just a visualization of the test you're performing
plot(0, 0, xlim = c(-5, 11), ylim = c(0, 0.25), type = "n")
curve(dnorm(x, mean = 5, sd = 2), add = TRUE)
curve(dnorm(x, mean = 0, sd = 2), add = TRUE)

out <- apply(xy, MARGIN = 1, FUN = function(x) {
  # x is a vector, e.g. xy[i, ] or xy[1, ]
  t.test(x = x[1:5], y = x[6:10])$p.value
})
out

Роман: Я вижу, как вы создаете новую переменную xy. При написании фрагмента я сохраняю функцию (x) и заменяю x на group1 и y на group2 в вашем примере для t.test? Большое спасибо!

Oars 19.08.2018 18:21

@Oars xy - ваш объект. Аргумент FUN передается анонимной функции. Аргументы в этой анонимной функции (в данном случае x) должны соответствовать аргументам в ее теле (например, x[1:5]). Это преимущество функции. Вы меняете ввод, но в теле функции все предсказуемо.

Roman Luštrik 19.08.2018 19:56

Другие вопросы по теме

Похожие вопросы

Аргумент не является числовым или логическим с функцией rollapply, за которой следуют NA, введенные с помощью принуждения
Извлечение списка-в-списке-в-списке для построения фрейма данных в R
Первое наблюдение не имеет номера строки
Как предотвратить это после того, как я использую функцию lappy () для фрейма данных, имя столбца изменится?
Удалите только одну строку повторяющихся строк с критерием
Создание изображения на основе целочисленной матрицы и цветовой карты
Выберите пять лучших значений из каждой группы в r
Как изменить значения, разделенные запятыми, в одном элементе на несколько столбцов и назначить числовое кодирование
Вычисление и понимание безмасштабных сетей с использованием модели Барабаши-Альберта
R - «Ошибка в варьировании [, i]: неправильное количество измерений» при изменении формы с длинного на широкое