0

我有一个数据矩阵,其中包含 100,000 行值,这些值对应于几种细胞类型的甲基化值。我想在聚集的热图中直观地显示甲基化的变化。为了使数据变得更易于管理,我正在考虑每 10 行左右创建一个新的数据矩阵。有什么简单的方法可以做到这一点吗?

4

2 回答 2

3

参数的使用seq和组合。例如:

m1 <- matrix(runif(100000*10), ncol = 10)

m2 <- m1[seq(from = 1, to = nrow(m1), by = 10), ]

> dim(m2)
[1] 10000    10

这是如何运作的?看看这是做什么的:

> sq <- seq(from = 1, to = nrow(m1), by = 10)
> head(sq)
[1]  1 11 21 31 41 51
> tail(sq)
[1] 99941 99951 99961 99971 99981 99991
> nrow(m1)
[1] 100000

我们指定从第一行到最后一行,每步递增 10。这给了我们第 1、11、21 行等。当我们到达序列的末尾时,即使我们nrow(m1)在 99991 中指定了序列中的最后一个元素(即 100000)。这是因为 99991 + 10 会使我们超出参数限制(超过 100000) ,from因此不包括在序列中。

于 2013-06-10T20:46:52.350 回答
1

尝试以下方法,它采用您的大矩阵m并生成一个较小矩阵的列表。它生成一系列在每个chunk.length值处中断的索引,然后收集块。

list.of.matrices <- lapply(X=seq.int(1, nrow(m), by=chunk.length)),
                           FUN=function (k) {
                             m[k + seq_len(chunk.length) - 1, ])
                           })

但是,如果您有 100,000 行,那么单独保存所有这些块对您的 RAM 来说是一种浪费。也许,您可以只对子集进行所需的计算并仅保存结果。只是一个建议。

于 2013-06-10T20:49:45.813 回答