【问题标题】:Easy way to concatenate several matrices in R在 R 中连接多个矩阵的简单方法
【发布时间】:2020-02-27 16:50:59
【问题描述】:

有没有一种简单的方法可以基于其他几个块矩阵在 R 中构建矩阵?

假设我有 A1、A2、A3 和 A4 矩阵。我想构造一个矩阵 A,它在 matlab 中等效于 [A1,A2;A3;A4]。我知道我可以使用 rbind(cbind(A1,A2),cbind(A3,A4)),有没有更有效和直接的方法?

【问题讨论】:

  • 如果您包含一个简单的reproducible example,其中包含可用于测试和验证可能解决方案的示例输入和所需输出,则更容易为您提供帮助。但通常在 R 中,您需要使用 rbindcbind 来组合矩阵。您可以编写自己的函数以使其更容易,但就基本选项而言,就是这样。
  • 出于好奇,您认为rbind() / cbind() 方法效率低下的地方是什么?

标签: r matrix rbind cbind


【解决方案1】:

R 并没有很多用于创建像 matlab 这样的矩阵的快捷符号。最明确的是坚持使用rbindcbind,就像您已经完成的那样。如果这是你发现自己经常做的事情,你可以写一个这样的辅助函数

mat_shape <- function(expr) {
  env<-new.env(parent=parent.frame())
  env[[":"]] <- base::cbind
  env[["/"]] <- base::rbind
  eval(substitute(expr), envir = env)
}

在这里,我们将 : 重新优化为 cbind 并将 / 重新优化为此特定函数输入的 rbind。那你就可以了

A <- matrix(1:6, ncol=3)
B <- matrix(1:4, ncol=2)
C <- matrix(1:3, ncol=1)
D <- matrix(1:12, ncol=4)

mat_shape(A:B/C:D)
#      [,1] [,2] [,3] [,4] [,5]
# [1,]    1    3    5    1    3
# [2,]    2    4    6    2    4
# [3,]    1    1    4    7   10
# [4,]    2    2    5    8   11
# [5,]    3    3    6    9   12

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多