1

在一个 for 循环之后,我创建了 4 个数据帧(data1, data2,data3,data4),我想 rbind 全部。我试过了:

do.call(rbind, mget(paste0("data", 1:4)))

但有时,for循环只给了我 3 个,例如:data1, data2, data4.

似乎do.call不知道如何处理这个问题。

我该怎么做才能仍然拥有rbindof data1, data2, data4

4

3 回答 3

2

您可以从全局环境中获取所有对象(通过ls())并使用grep来获取遵循您需要的模式的对象,即

do.call(rbind, mget(grep('data[0-9]+', ls(), value = TRUE)))
于 2019-08-02T08:17:33.097 回答
1

也许检查exists环境中的数据框是否mget只有那些。

data_names <- paste0("data", 1:4)
do.call(rbind, mget(data_names[sapply(data_names, exists)]))
于 2019-08-02T08:19:10.427 回答
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

于 2019-08-02T08:35:34.130 回答