目前,我有多个具有相同名称且按运行顺序排列的数据帧(、、、、...foo1等)。我正在尝试创建一个包含上述数据帧的所有行的大型数据帧。有没有一种优雅的方法来做到这一点,相当于?foo2foo3foo4foo5rbind()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) )
然而,答案神秘地说“这是处理相关项目的错误方法。最好使用列表或数据框,但您可能会在适当的时候找到原因。”
为什么这是错误的方法,什么是“正确”的方法?
谢谢。
始终尝试严格捕获相关数据实例、相关数据和方法或相关方法之间的关系。这通常有助于简化聚合操作,例如您的rbind要求。
对于您的情况,您应该从一开始就将相关的 data.frames 定义为单个列表:
foo <- list(data.frame(...), data.frame(...), ... );
Run Code Online (Sandbox Code Playgroud)
然后你的要求就可以得到满足:
do.call(rbind, foo );
Run Code Online (Sandbox Code Playgroud)
如果为时已晚,那么涉及重复调用的解决方案get()(如您链接的文章中所述)可以完成这项工作。