【发布时间】:2014-03-12 19:13:22
【问题描述】:
在许多 R 函数中,... 参数用于提供多个对象。如何在 ... 参数中提供 list 对象?
例如:
x1 <- head(iris)
x2 <- tail(iris)
rbind(x1, x2)
# Sepal.Length Sepal.Width Petal.Length Petal.Width Species
#1 5.1 3.5 1.4 0.2 setosa
#2 4.9 3.0 1.4 0.2 setosa
#3 4.7 3.2 1.3 0.2 setosa
#4 4.6 3.1 1.5 0.2 setosa
#5 5.0 3.6 1.4 0.2 setosa
#6 5.4 3.9 1.7 0.4 setosa
#145 6.7 3.3 5.7 2.5 virginica
#146 6.7 3.0 5.2 2.3 virginica
#147 6.3 2.5 5.0 1.9 virginica
#148 6.5 3.0 5.2 2.0 virginica
#149 6.2 3.4 5.4 2.3 virginica
#150 5.9 3.0 5.1 1.8 virginica
但假设我在list 中有x1 和x2 数据帧。如何在rbind 中将list 与... 参数一起使用?
我已经尝试了以下方法,但没有成功:
rbind(list(x1, x2))
rbind(substitute(list(x1, x2))[-1])
rbind(unlist(list(x1, x2)))
在每种情况下,结果都与rbind(x1, x2) 不同。我错过了什么?
更新1:
正如答案中所建议的那样,do.call(rbind, list(x1, x2)) 在这种情况下似乎工作得很好。但是,我想知道是否可以避免使用do.call 机器。换句话说,是否可以转换list(x1, x2) 以便... 正确理解它?
【问题讨论】:
-
do.call是一个很棒的功能,当你说你无缘无故地想避免它时,我相信你已经伤害了它的感受。我也不明白你为什么认为rbind(list)会起作用。正如你所说,rbind在...中有几个对象。列表是单个对象。 -
@rawr 无意冒犯。 :) 至于
list,它是几个对象的集合。我希望类似于unlist(list)的技巧会自动将几个嵌入对象传递给rbind()。
标签: r list arguments ellipsis variadic-functions