do.call跳过错误并继续处理

时间:2019-08-02 08:12:46

标签: r

在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}}?

3 个答案:

答案 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.callReduce解决方案的替代方案。