【问题标题】:Replicate vector in R在 R 中复制向量
【发布时间】:2013-02-13 16:40:38
【问题描述】:

我有一个向量说vec = c(1,1),我想将它(cbind)列复制10次,这样我就可以得到看起来像matrix(1, 10, 2)的东西。是否有在vec 上运行的函数可以进行这种复制?即代表(vec,10)?

谢谢!

【问题讨论】:

    标签: r vector replication


    【解决方案1】:
    vec <- c(1,2)
    rep(1,10) %*% t.default(vec)
          [,1] [,2]
     [1,]    1    2
     [2,]    1    2
     [3,]    1    2
     [4,]    1    2
     [5,]    1    2
     [6,]    1    2
     [7,]    1    2
     [8,]    1    2
     [9,]    1    2
    [10,]    1    2
    

    或者正如@Joshua 指出的那样:

    tcrossprod(rep(1,10),vec)
    

    一些基准测试:

    library(microbenchmark)
    
    microbenchmark(rep(1,10) %*% t.default(vec),
                   matrix(rep(vec, each=10), ncol=2),
                   t.default(replicate(10, vec)),
                   tcrossprod(rep(1,10),vec),times=1e5)
    
    Unit: microseconds
                                       expr    min     lq  median      uq       max
    1 matrix(rep(vec, each = 10), ncol = 2)  2.819  3.699  4.3970  5.3700  2132.240
    2         rep(1, 10) %*% t.default(vec)  2.456  3.185  3.6750  5.5370  2121.746
    3         t.default(replicate(10, vec)) 57.741 62.987 64.3740 65.9590 26654.678
    4           tcrossprod(rep(1, 10), vec)  2.192  2.924  3.3745  5.2465  2145.709
    

    【讨论】:

    • 你也可以使用tcrossprod
    • @shujaa 我们试图得到类似matrix(1, 10, 2) 的东西,这正是 OP 声称想要的。
    【解决方案2】:

    一个选项是:

    vec <- c(1,1)
    t(replicate(10, vec))
    
    > t(replicate(10, vec))
          [,1] [,2]
     [1,]    1    1
     [2,]    1    1
     [3,]    1    1
     [4,]    1    1
     [5,]    1    1
     [6,]    1    1
     [7,]    1    1
     [8,]    1    1
     [9,]    1    1
    [10,]    1    1
    

    【讨论】:

      【解决方案3】:

      怎么样:

      R> vec = c(1,2)
      R> matrix(rep(vec, each=10), ncol=2)
           [,1] [,2]
       [1,]    1    2
       [2,]    1    2
       [3,]    1    2
       [4,]    1    2
       ....
      

      【讨论】:

        猜你喜欢
        • 2021-12-25
        • 2015-09-07
        • 1970-01-01
        • 1970-01-01
        • 2013-02-02
        • 1970-01-01
        • 1970-01-01
        • 2021-01-17
        • 2021-04-17
        相关资源
        最近更新 更多