【问题标题】:R, controlling population of array from matrices and vectorR,从矩阵和向量控制数组的数量
【发布时间】:2019-01-29 19:36:43
【问题描述】:

如果我从两个大小相同的 2,5 矩阵开始:

m1 <- matrix(1:10, nrow = 2)
m2 <-  matrix(11:20, nrow = 2)

我正在尝试提高我的数组技能(受this SO 启发),但想不出使用base R 将它们绑定到2,2,5 数组a 的“通用”方式,以便:

> a[1,,]
     [,1] [,2] [,3] [,4] [,5]
[1,]    1    3    5    7    9
[2,]    2    4    6    8   10

我可以使用 abind 包并获得所需的:

> a <- abind::abind(m1, m2, along = 0 )
> a[1,,]
     [,1] [,2] [,3] [,4] [,5]
[1,]    1    3    5    7    9
[2,]    2    4    6    8   10

> all(a[1,,]==m1)
[1] TRUE

1) 如何使用基础 R 来做到这一点

2) 在不创建 m1m2 的情况下可以做同样的事情吗? (这不起作用:array(1:20, dim = c(2, 2, 5))

【问题讨论】:

    标签: arrays r matrix


    【解决方案1】:

    这是一个使用rbind的选项

    b <- array(rbind(1:10, 11:20), dim = c(2, 2, 5))
    b[1,,]
    

    结果

    #     [,1] [,2] [,3] [,4] [,5]
    #[1,]    1    3    5    7    9
    #[2,]    2    4    6    8   10
    

    上面介绍的方式用这个向量填充你的数组

    #[1] 1 11  2 12  3 13  4 14  5 15  6 16  7 17  8 18  9 19 10 20
    

    这是我们调用时得到的

    c(rbind(1:10, 11:20))
    

    另一种选择是

    array(matrix(1:20, nrow = 2, byrow = TRUE), dim = c(2, 2, 5))
    

    这里matrix(1:20, nrow = 2, byrow = TRUE) 部分与上面显示的rbind(1:10, 11:20) 具有相同的效果。

    【讨论】:

    • 但这不会给出所需的结构(a[1,,] 等于 m1,a[2,,] 等于 m2。
    • 是的,这更好 - 现在将尝试消化 rbind 这样做的原因。可以延长到4点吗?
    猜你喜欢
    • 2018-02-20
    • 2017-11-05
    • 2015-04-23
    • 1970-01-01
    • 2013-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-19
    相关资源
    最近更新 更多