【问题标题】:Why is rbind(c(1,2,3),c(4,5,6)) not the same as Reduce(rbind,c(c(1,2,3),c(4,5,6)))?为什么 rbind(c(1,2,3),c(4,5,6)) 与 Reduce(rbind,c(c(1,2,3),c(4,5,6)) 不一样)?
【发布时间】:2014-10-10 04:45:50
【问题描述】:

假设我想 rbind 任意数量的相同长度的对象,所以我认为减少该对象的向量是解决方案。但是:

rbind(c(1,2,3),c(4,5,6))
>     [,1] [,2] [,3]
 [1,]    1    2    3
 [2,]    4    5    6

然而,

Reduce(rbind,c(c(1,2,3),c(4,5,6)))
>      [,1]
 init     1
          2
          3
          4
          5
          6

为什么两者不产生相同的输出,我应该如何 rbind 任意数量的相同长度的对象?

【问题讨论】:

  • 使用 do.call(rbind,list(c(1,2,3),c(4,5,6))) 或将参数作为列表传递给 Reduce Reduce(rbind,list(c(1,2,3),c(4,5,6)))

标签: r reduce rbind


【解决方案1】:

如果你只运行

c(c(1,2,3),c(4,5,6))
# [1] 1 2 3 4 5 6

您会看到它只是创建了一个长度为 6 的向量。它不是两个单独的向量。你不能有一个包含其他向量的向量,但你可以有一个包含向量的列表。因此,正确的语法是

Reduce(rbind,list(c(1,2,3),c(4,5,6)))

#      [,1] [,2] [,3]
# init    1    2    3
#         4    5    6

【讨论】:

    【解决方案2】:

    对于任意数量的向量,您可以将它们放入list 并使用do.call

    > do.call("rbind", list(c(1,2,3),c(4,5,6)))
    #     [,1] [,2] [,3]
    #[1,]    1    2    3
    #[2,]    4    5    6
    

    在较长的列表中,例如:

    > do.call("rbind", list(c(1,2,3),c(4,5,6), 7:9, 10:12))
    #     [,1] [,2] [,3]
    #[1,]    1    2    3
    #[2,]    4    5    6
    #[3,]    7    8    9
    #[4,]   10   11   12
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-08-13
      • 1970-01-01
      • 2018-06-24
      • 2020-03-01
      • 1970-01-01
      • 2021-06-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多