在for循环之后,我创建了4个数据帧(if(Article == null) //do somthing else
),我想对所有这些数据帧进行绑定。
我尝试过:
data1, data2,data3,data4
但是有时候,do.call(rbind, mget(paste0("data", 1:4)))
循环只给了我3个,例如:for
。
似乎data1, data2, data4
不知道该如何处理。
我怎么办仍然有do.call
的{{1}}?
答案 0 :(得分:2)
您可以从全局环境中(通过ls()
获取所有对象,并使用grep
来获取遵循所需模式的对象,即
do.call(rbind, mget(grep('data[0-9]+', ls(), value = TRUE)))
答案 1 :(得分:1)
也许检查数据帧exists
是否在环境中,而mget
仅在那些环境中。
data_names <- paste0("data", 1:4)
do.call(rbind, mget(data_names[sapply(data_names, exists)]))
答案 2 :(得分:0)
您可以使用ls
中的模式匹配机制来识别您的对象,因为mget
采用对象名称的字符向量,而pattern
中的ls
参数可以使用正则表达式,比通过paste
生成对象名称更灵活。
data_cars_one <- mtcars
data_cars_two <- mtcars
library(tidyverse)
res_all <- bind_rows(mget(x = ls(pattern = "^data")))
关于绑定,我使用bind_rows
作为do.call
和Reduce
解决方案的替代方案。