首页 > 解决方案 > 如何最好地处理 R 中的未知对象名称

问题描述

我正在编写一个通用过程,但我不明白如何处理未知对象的名称。在这种情况下,我将所有 *.Rda 文件加载到目录中并执行 rbind 以创建数据框。Rda 文件的名称和数量可能会有所不同。我的问题是如何最好地处理这种情况?

library(data.table)
# Load all data frames in wd
my_files <- list.files(pattern='*.Rda',full.names = TRUE)
# Names of files without .Rda suffix
my_files_names <- gsub(".Rda$","",list.files(pattern='*.Rda'))
# load each data frame, creates objects with names in my_files_names
for(i in 1:length(my_files)){
  load(my_files[i])
}
# make large data frame from all loaded data frames
combined_df <- rbindlist(my_files_names)

我收到错误 Input is character but should be a plain list of items to be stacked

combined_df <- rbindlist(as.list(my_files_names))不起作用。

该示例将rbind每个对象用作参数,但由于某种原因,字符向量不能用于引用在运行时名称未知的对象。我错过了什么?

标签: rdataframedata.table

解决方案


解决方案是两条线:

library(dplyr)
my_files <- list.files(pattern='*.rds',full.names = TRUE)
combined_df <- bind_rows(lapply(my_files, readRDS))

首先,对象的名称并不重要,因此我可以采用这种不同的方法。其次,.Rda文件的使用造成了问题。此文件类型可以包含多个对象。尽管我的文件每个文件只有一个数据框,但 about 的代码不会load作为lapply. 我将我的文件转换为.rds文件,每个文件只允许一个数据帧并且代码运行良好。


推荐阅读