加载多个 .RData 并绑定到一个 data.frame

Loading multiple .RData and binding into a single data.frame

我在一个文件夹中有多个 .RData。我可以按如下方式加载它们:

df1 <- data.frame(X = 1:10)
df2 <- data.frame(X = 1:10)

save(df1, file = "df1.RData", compress = "xz")
save(df2, file = "df2.RData", compress = "xz")

rm(list = ls())

load("df1.RData")
load("df2.RData")

并使用 dplyr 中的 bind_rows 函数将它们绑定为

library(tidyverse)
bind_rows(df1, df2)

我想知道是否可以加载所有文件并像这样绑定它们

list.files(
      path      = "."
    , pattern    = "*.RData"
    , full.names = TRUE
    )  %>%
  map_dfr(.x = ., .f = ~load(file = .x))

您可以使用 get() 来 return 来自调用环境的数据,或者将它们加载到新环境中,然后再绑定它们。请注意,.Rdata 文件可以包含多个对象,但假设这些对象都是一致的,您可以这样做:

library(purrr)
library(dplyr)

df1 <- data.frame(X = 1:10)
df2 <- data.frame(X = 1:10)

save(df1, file = "df1.RData", compress = "xz")
save(df2, file = "df2.RData", compress = "xz")

list.files(pattern = "\.RData$") %>%
   map_df(~ get(load(file = .x)))

    X
1   1
2   2
3   3
4   4
5   5
6   6
7   7
8   8
9   9
10 10
11  1
12  2
13  3
14  4
15  5
16  6
17  7
18  8
19  9
20 10 

或者:

temp_env <- new.env()

list.files(pattern = "\.RData$")  %>%
  map(~load(file = .x, envir = temp_env)) 

bind_rows(as.list(temp_env))