Выражение гена не будет работать, потому что «аргументы подразумевают различное количество строк» - PullRequest
0 голосов
/ 26 августа 2018

Я использую набор данных ALL из Bioconductor.Моя задача - преобразовать атрибут «BT» в категориальные переменные всего с двумя уровнями «B» и «T», а затем проверить все гены на предмет значительной ассоциации с подтипом заболевания B / T с помощью ANOVA, а затем построить р-значения.

В качестве решения я выполнил следующее:

> bcell = grep("^B", as.factor(ALL$BT))
> tcell = grep("^T", as.factor(ALL$BT))

Затем я адаптировал фрагмент кода, который я также использовал для возраста:

> anova.lm.bcell <- function(x) {
+ df.tmp <-data.frame(Expr=x,bcell)
+ anova(lm(bcell~Expr,df.tmp)) ["Expr", "Pr(>F)"]
+ }

Но когда яоценить роль B-клетки (от BT) в экспрессии генов с помощью приведенного ниже кода. Я получаю ужасное сообщение «различное количество строк»!

p.bcell <- apply(exprs(ALL), 1, anova.lm.bcell)

 Error in data.frame(Expr = x, bcell) : 
  arguments imply differing number of rows: 128, 95 

Это имеет смысл, у меня 95 B-клеток и33 "Т" клетки, но я не могу разработать сценарий, который будет работать?

1 Ответ

0 голосов
/ 27 августа 2018

Есть ли какая-то конкретная причина, по которой вы выбираете grep() вместо grepl()?

Если вы используете grepl() и заключите его в вызов к as.integer(), тогда у вас будет целое числовектор, который будет иметь ту же длину, что и ваш исходный файл data.frame.

bcell = as.integer(grepl("^B", as.factor(ALL$BT)))
tcell = as.integer(grepl("^T", as.factor(ALL$BT)))

anova.lm.bcell <- function(x) {
    df.tmp <-data.frame(Expr=x,bcell=bcell)
    anova(lm(bcell~Expr,df.tmp)) ["Expr", "Pr(>F)"]
}

p.bcell <- apply(exprs(ALL), 1, anova.lm.bcell)

Значение bcell будет 1, когда ALL$BT начинается с буквы "B" и 0 в противном случае.Достаточно ли простого флага 1/0 для вашего вектора bcell и tcell для вашего варианта использования?

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