Я пытаюсь провести 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})
Но я могу сказать по своему сюжету, что я не нахожусь (сюжеты расположены по прямой линии).
С помощью приведенного ниже кода я получаю один 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)
Мне удалось вычислить t.test для каждой строки. t.test.mRNA143.data<-apply(mRNA143.data, 1, t.test)
, как извлечь p-значения для построения графика?
Воспроизводимый пример будет иметь большое значение. Готовя его, вы могли понять, что пытаетесь разбить столбцы на подмножества на основе среднего значения, что на самом деле не имеет смысла.
Что вы хотите сделать, так это пройтись по строкам ваших данных, столбцам подмножества, принадлежащим определенной группе, повторить для второй группы и передать это в функцию 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 xy
- ваш объект. Аргумент FUN
передается анонимной функции. Аргументы в этой анонимной функции (в данном случае x
) должны соответствовать аргументам в ее теле (например, x[1:5]
). Это преимущество функции. Вы меняете ввод, но в теле функции все предсказуемо.
Сделайте свой вопрос воспроизводимый, поделившись минимальным набором данных, чтобы сообщество помогло вам лучше.