让我们说我想要对相同长度的任意数量的对象进行研究,所以我认为减少对象的向量是解决方案。但是:
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
为什么两者不能产生相同的输出?我应该如何处理相同长度的任意数量的对象呢?
答案 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