3

我是 R 新手,我正在努力学习这门语言。我一直在研究 Bioconductor 的 multtest 包中包含的 Golub (1999) 数据。

以 Golub 数据为例,我试图在“ALL”患者(由第 1 到 27 列表示;“AML”患者表示第 28 至 38 栏)。这就是我所做的:

library(multtest); data(golub)
gol.fac <- factor(golub.cl,levels=0:1, labels= c("ALL","AML"))
x <- golub[1042, gol.fac=="ALL"] > 2.4
golub [1042, x]

我得到的结果是:

[1] 2.44562 2.76610 2.59385 1.12058

为什么得到值“1.12058”?我发现“1.12058”是第 1042 行中属于 AML 患者的最后一个(第 38 列)表达式值。

有人可以告诉我做我想做的事情的正确方法吗?并解释为什么我得到 AML 患者的价值?

4

2 回答 2

7

@seancarmody 给了你一个完美的答案,但我发现他使用的范式不太可读(这纯粹是主观的)。这是我试图展示一种稍微不同的方式。

golub[1042, which(golub[1042, gol.fac == "ALL"] > 2.4)]

从内到外阅读,我们有:

  • 选择第 1042 行和列gol.fac == "ALL"
  • 查找大于 2.4(which()部分)的值的位置
  • Subsetgolub的第 1042 行并取出值大于 2.4 的列(最外层[]
于 2012-08-21T09:06:15.767 回答
5

您的向量x将是一系列TRUEFALSE值,指示golub[1042, gol.fac=="ALL"]值大于 2.4 的位置,但随后您使用它来索引x <- golub[1042, ](即跨越两个因素,而不仅仅是AML.

尝试这个:

golub[1042, gol.fac=="ALL"][x]
于 2012-08-21T08:52:35.613 回答