为什么rbind(c(1,2,3),c(4,5,6))与Reduce(rbind,c(c(1,2,3),c(4,5,6))不同)?

时间:2014-08-16 20:10:10

标签: r reduce 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

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

2 个答案:

答案 0 :(得分:2)

如果你只是运行

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

答案 1 :(得分:1)

对于任意数量的向量,您可以将它们放入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