我正在使用Bioconductor的ALL数据集。我的任务是将“ BT”属性转换为仅具有两个级别“ B”和“ T”的分类变量,然后使用ANOVA测试所有与B / T疾病亚型有显着关联的基因,然后绘制p值。 / p>
作为解决方案,我执行了以下操作:
> 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个“ T”单元格,但是我无法开发出可以运行的脚本?
答案 0 :(得分:0)
您选择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
以“ B”开头时,1
的值为ALL$BT
,否则为0
。您的bcell
和tcell
向量的简单1/0标志足以满足您的用例吗?