我有一个数据矩阵,其中包含100,000行的值,这些值对应于几种细胞类型的甲基化值。我想在集群热图中直观地显示甲基化的变化。为了使数据更易于管理,我正在考虑每10行左右创建一个新的数据矩阵。有什么简单的方法可以做到这一点吗?
发布于 2013-06-11 04:46:52
使用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。当我们到达序列的末尾时,即使我们将nrow(m1) ( 100000)指定为99991中的最后一个元素,也会得到第1、11、21行等。这是因为99991 + 10会使我们超出from参数限制(超过100000),因此不包括在序列中。
发布于 2013-06-11 04:49:46
尝试执行以下命令,该命令将获取大型矩阵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来说将是浪费的。也许,您可以只对子集执行所需的计算,并且只保存结果。这只是个建议。
https://stackoverflow.com/questions/17032460
复制相似问题