【问题标题】:Make a matrix from submatrix in R从R中的子矩阵制作矩阵
【发布时间】:2016-08-30 19:35:58
【问题描述】:

我需要在R 中创建一个矩阵,其元素来自我之前定义的矩阵。 比如我有4个矩阵,

w <- matrix(c(1,2,3,4),2,2)
x <- matrix(c(5,6,7,8),2,2)
y <- matrix(c(9,10,11,12),2,2)
z <- matrix(c(13,14,15,16),2,2)

那么,新矩阵应该是一个4X4矩阵,其中w是一个[1:2,1:2]元素,x是一个[1:2,3:4]元素,y是一个[3:4,1:2]元素,z是一个[3:4,3:4] 元素。

我怎样才能快速做到这一点?

【问题讨论】:

  • rbind( cbind(w,x), cbind(y,z) ) 作为它的手动版本。

标签: r matrix submatrix


【解决方案1】:

我们可以创建一个array,然后循环遍历第三维,然后rbind它。

ar1 <- array(c(w, x, y,z), dim=c(2, 4,2))
do.call(rbind,lapply(seq(dim(ar1)[3]), function(i) ar1[,,i]))
#     [,1] [,2] [,3] [,4]
#[1,]    1    3    5    7
#[2,]    2    4    6    8
#[3,]    9   11   13   15
#[4,]   10   12   14   16

或者像 cmets 中提到的 @thelatemail 一样

apply(array(c(w,x,y,z), dim=c(2,4,2)), 2, I)

其中I 代表inhibit interpretation 或使用identity 代替I

【讨论】:

  • apply(ar1,2,identity) 也将带您到那里 - 或 apply(array(c(w,x,y,z), dim=c(2,4,2)), 2, identity) 一口气
  • dim=c(2,4,2) 是什么意思?
  • @YohanesEkiApriliawan 是我们为 3d 数组指定的维度属性,即。
  • I 不代表identity - 根据?I 的帮助文件,它可能代表inhibit interpretation
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-20
  • 2021-10-14
相关资源
最近更新 更多