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