分割数据矩阵

时间:2013-06-10 20:42:10

标签: r matrix

我有一个数据矩阵,其中100,000行值对应于几种细胞类型的甲基化值。我想直观地显示聚类热图中甲基化的变化。为了使数据更易于管理,我考虑每隔10行左右创建一个新的数据矩阵。有没有简单的方法呢?

2 个答案:

答案 0 :(得分:3)

使用seq和参数组合。 E.g:

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等。当我们到达序列的末尾时,即使我们在99991中指定了nrow(m1)(即100000)序列中的最后一个元素。这是因为99991 + 10将使我们超出from参数限制(超过100000),因此不包括在序列中。

答案 1 :(得分: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将分别保存所有这些块将是浪费。也许,您可以对子集执行所需的计算并仅保存结果。只是一个建议。