如何从 R 中的 2 个合并矩阵创建一个向量并用 NA 填充任何维度间隙?

How to create a vector from 2 merged matrices in R and fill in any dimension gaps with NA's?

假设我生成了一个 4x4 矩阵,如下图所示 mat1。 (图像来自 R Studio 控制台的快照)。例如,假设我生成了另一个任意大小的矩阵(下图中的 1x2 mat2)。 (在我的代码中,上述两个矩阵的矩阵元素和维度根据用户输入而变化;尽管列仅以 2 的倍数生成,所以我可以有一个 [ ]x2 矩阵,[ ]x4,[ ]x6,等等,行数可以是任意整数)。

在我的代码中,这两个矩阵被合并成一个向量(通过 R 包 shinyMatrix 处理需要一个向量)。

由于这 2 个矩阵维度是可变的,因此在将这 2 个矩阵合并为一个向量时,有时您不会得到正确数量的元素以转换回“可标注”矩阵。如下图所示 mat3,其中在组合 2 个矩阵 mat1mat2 后有 18 个元素,必须删除某些元素并插入 NA 以 4x4 结束,此示例中的 16 元素矩阵。

在某些情况下 mat2 可以比 mat1 拥有更多的元素。在这个例子中,我显示 mat1 有 16 个元素,mat2 有 2 个元素。

重要的是,在代码中,只有 mat1 的前两列可以用 mat2 值以这种方式替换。 mat1 的第 3+ 列从未被 mat2 更改。

有没有有效的编码方法?将 2 个矩阵一起放入较大矩阵的维度中,并用 NA 填充任何缺失的元素?

我正在测量 mat1 第 1 列和第 2 列的长度,测量 mat2 第 1 列和第 2 列的长度,合并、替换元素等,但是以我有限的经验,它看起来很麻烦而且工作不正常。我敢打赌 R 有一种巧妙的方法来完成这类事情。 apply 函数之一,例如 mapply?我在某处读到 mapply 非常适合子集矩阵。Tibbles?

这是我为下图输入的矩阵:

mat1 <- matrix(c(1,2,NA,NA, 3,4,NA,NA, 5:12), ncol = 4)
mat2 <- matrix(c(10,30), ncol = 2)
mat3 <- c(mat2,mat1)

根据预期的输出,我们可以 select 'mat1' 中没有 anyNA 的列,并将 (c) 与 length 通过在 'mat2'

的末尾附加 NA 更正了列
c(sapply(mat2, `length<-`, nrow(mat1)), mat1[,!apply(mat1, 2, anyNA)])
[1] 10 NA NA NA 30 NA NA NA  5  6  7  8  9 10 11 12