目前,我有多个名称相同且按运行顺序排列的数据框 (foo1
, foo2
, foo3
, foo4
, foo5
...等)。我正在尝试使用rbind()
创建一个包含上述所有数据框行的大型数据框。是否有一种优雅的方法可以将其与rbind(foo1, foo2, foo3, foo4, foo5...)
等效呢?
我已尝试do.call(rbind, paste0("foo",i))
,其中i = c(1,2,3...)
,但失败了。
此处提到了一种解决方案,即:
do.matrix <- do.call(rbind, lapply( paste0("variable", 1:10) , get) )
然而,答案神秘地说:“这是处理相关项目的错误方式。最好使用列表或数据框,但您可能会在适当的时候找出原因。”
为什么这样做是错误的?“正确”的方法是什么?
谢谢。
foo1
,foo2
等。如果最初将它们全部放入单个列表中,则可以将该列表直接传递给do.call
并完成。 - joranassign
创建了所有这些对象。这并不推荐,因为你可能会覆盖其他对象,并且可能无法有效地检索所有对象。更好的方法是初始化一个list
,然后将其中每个元素设置为你的数据框之一。无论如何,在你的例子中,如果N
是数据框的数量,那么do.call(rbind,mget(paste0("foo",1:N)))
应该可以工作。 - nicola