我有一个数据矩阵,其中100,000行值对应于几种细胞类型的甲基化值。我想直观地显示聚类热图中甲基化的变化。为了使数据更易于管理,我考虑每隔10行左右创建一个新的数据矩阵。有没有简单的方法呢?
答案 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将分别保存所有这些块将是浪费。也许,您可以对子集执行所需的计算并仅保存结果。只是一个建议。