如何批量导入大量RData文件?RDS导入代码适配遇阻
批量导入RData文件的解决方案
load()和readRDS()的核心区别在于:readRDS()直接返回单个对象,而load()是将文件中存储的所有对象加载到指定环境中,无法直接赋值。要实现批量导入,需要通过临时环境捕获加载的对象,以下是可行方案:
自定义读取RData的函数
先写一个函数,把load()加载的对象转换成可赋值的列表(或单个对象):
方案1:读取文件中所有对象(返回列表)
如果你的RData文件可能包含多个对象,用这个函数:
read_rdata <- function(path) { temp_env <- new.env() load(path, envir = temp_env) as.list(temp_env) }
方案2:读取单个对象(假设每个文件仅存一个对象)
如果每个RData文件里只有一个数据集,可简化函数直接返回该对象:
read_rdata_single <- function(path) { temp_env <- new.env() load(path, envir = temp_env) temp_env[[names(temp_env)[1]]] }
批量导入的完整代码
替换原RDS导入代码中的readRDS为自定义函数,同时修改扩展名匹配:
fs::dir_ls( path = paste("C:/Users/", Sys.info()["user"], "/Dropbox/66_COHORTE_obe/00_RAW_DATA - copie/1_GROUPE BARIA/DIAG/CLEAN DATASET", sep = ""), glob = "*DIAG*.RData", # 根据实际扩展名调整,也可以写"*DIAG*.rda" type = "file" ) %>% { tibble(path = ., data = map(., read_rdata)) # 用方案2的话就换成read_rdata_single } -> all_files_DIAG_CLEAN
说明
- 临时环境
temp_env用来隔离加载的对象,避免污染全局环境; - 最终
tibble的data列,方案1会存储每个文件的对象列表,方案2直接存储单个数据对象,按需选择即可。
内容的提问来源于stack exchange,提问作者Seydou GORO
相关产品推荐
相关产品推荐

