为何purrr::map()结合load()导入Rda数据集失败?
解决EDGAR Rda文件加载与合并问题
问题根源
你当前的代码报错,核心原因有两个:
load()函数的返回值是加载到环境中的对象名称字符串,而非对象本身,所以files列表里存的都是"year.master"这类字符串,不是数据框,自然无法用list_rbind()合并。- 每个Rda文件里的对象都命名为
year.master,直接用load()加载时,后续文件的对象会覆盖之前的,导致全局环境里只剩最后一个文件的数据。
解决方案
我们需要在加载文件时,把每个Rda里的year.master数据框单独提取出来,存入列表,避免互相覆盖,再进行合并。
步骤1:自定义加载函数
写一个函数,在局部环境中加载文件,提取目标数据框并返回:
load_master_index <- function(file_path) { # 创建局部环境,防止覆盖全局环境的同名对象 local_env <- new.env() # 在局部环境中加载Rda文件 load(file_path, envir = local_env) # 返回局部环境中的year.master数据框 local_env$year.master }
步骤2:批量加载并合并
调用自定义函数批量加载所有文件,再合并成一个大的数据框:
library(purrr) library(dplyr) # 获取所有Rda文件路径 paths <- list.files('Master Indexes', pattern = '[.]Rda$', full.names = TRUE) # 批量加载,得到数据框列表 master_data_list <- map(paths, load_master_index) # 合并所有数据框 combined_master_data <- list_rbind(master_data_list)
如果不用tidyverse包,也可以用base R实现:
# 获取文件路径 paths <- list.files('Master Indexes', pattern = '[.]Rda$', full.names = TRUE) # 批量加载 master_data_list <- lapply(paths, load_master_index) # 合并数据框 combined_master_data <- do.call(rbind, master_data_list)
这样就能把所有Rda文件里的year.master数据框收集到列表中,最终合并成一个完整的数据框。
内容的提问来源于stack exchange,提问作者Sharif
相关产品推荐
相关产品推荐

