重新排列矩阵的列,每行采用不同的顺序

丽贝卡·埃里斯库(Rebecca Eliscu)

我认为这个问题是不言自明的,但要明确:

我本质上是想以一种有效的方式置换矩阵的元素,而不是简单地对列进行重新排序以使列之间的关系保持不变。

现在,我正在尝试像这样产生这种重新排序:

inds=matrix(nrow=nrow(datExprNorm),ncol=ncol(datExprNorm))
for(i in 1:nrow(datExprNorm)){
  inds[i,]=sample(1:ncol(datExprNorm),ncol(datExprNorm))
}

然后用重新排序的条目索引我的原始矩阵:

datPermut=datExprNorm[inds]

但是我遇到了这个错误:

datExprNorm [inds]中的错误:此类索引必须通过逻辑或2列数字矩阵进行

提前致谢!

德申

我似乎通过先转换为数字然后重新创建矩阵来回往返来使其运行:

datExprNorm_numeric <- as.numeric(datExprNorm)
inds_numeric <- as.numeric(inds)

sampled <- datExprNorm_numeric[inds_numeric]

datPermut <- matrix(sampled, nrow = nrow(datExprNorm), ncol = ncol(datExprNorm))

这是一个较小的玩具示例:

x <- matrix(c(4, 3, 2, 1), nrow = 2)

给出:

     [,1] [,2]
[1,]    4    2
[2,]    3    1

y <- matrix(c(1, 1, 2, 2), nrow = 2)

     [,1] [,2]
[1,]    1    2
[2,]    1    2

现在结合:

z <- as.numeric(x)[as.numeric(y)]

z <- matrix(z, nrow = 2, ncol = 2)

结果:

     [,1] [,2]
[1,]    4    3
[2,]    4    3

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章