说我有两个向量v1v2,我想调用rbind(v1, v2)。但是,假定为length(v1)> length(v2)。从文档中我已经读到较短的向量将被回收。这是此“回收”的示例:

v1 <- c(1, 2, 3, 4, 8, 5, 3, 11)
v2 <- c(9, 5, 2)
rbind(v1, v2)
#    [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8]
# v1    1    2    3    4    8    5    3   11
# v2    9    5    2    9    5    2    9    5
  • 有什么简单的方法可以阻止v2回收,而是将其余条目设置为0?
  • 有没有更好的方法来构建向量和矩阵?

  • 非常感谢所有帮助!

    最佳答案

    使用以下内容:

    rbind(v1, v2=v2[seq(v1)])
    
       [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8]
    v1    1    2    3    4    8    5    3   11
    v2    9    5    2   NA   NA   NA   NA   NA
    

    工作原理:
    用大于其长度的值索引向量时,将在该索引点返回NA值。
     #eg:
    {1:3}[c(3,5,1)]
    #[1]  3 NA  1
    
    因此,如果用较长者的索引为较短者索引,则将获得较短者的所有值以及一系列NA的值。

    概括:
    v <- list(v1, v2)
    n <- max(lengths(v))
    # same:
    # n <- max(sapply(v, length))
    do.call(rbind, lapply(v, `[`, seq_len(n)))
    

    关于r - 不同长度的rbind向量: pad with zero (or NA) instead of recycling,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16556479/

    10-13 04:54