【问题标题】:How best to handle unknown object names in R如何最好地处理 R 中的未知对象名称
【发布时间】:2020-06-27 18:42:27
【问题描述】:

我正在编写一个通用过程,但我不明白如何处理未知对象的名称。在这种情况下,我将所有 *.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 &lt;- rbindlist(as.list(my_files_names)) 不起作用。

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

【问题讨论】:

  • 您真的需要代码下游的对象名称吗?因为如果不是,你可以尝试使用类似的东西:combined_df &lt;- my_files %&gt;% lapply(., load) %&gt;% rbindlist() 使用library(magrittr) 用于%&gt;% 管道(我没有你的数据,所以我无法测试它)。请注意@A5C1D2H2I1M1N2O1R2T1 的评论,并确保您的对象仅包含一个 data.frame 以使这种解决方案能够正常工作
  • .Rda 文件只包含一个数据框。谢谢@davidnortes 的建议。名字并不重要。你的建议给了我一个错误Error in rbindlist(.) : Item 1 of input is not a data.frame, data.table or list。我也尝试过combined_df &lt;- bind_rows(lapply(my_files, load)),但这也不起作用。
  • 如果你的 Rda 文件有一个 data.frame 为什么不使用 RDS 文件呢?
  • @jangorecki 是的,Rds 会更好。这些文件是由另一个用户创建的……我将测试这个问题是否与 Rda/Rds 有关。谢谢你的建议
  • 创建rds 文件并使用它们有效。我认为问题来自rda 格式,但我不确定。 my_files &lt;- list.files(pattern='*.rds',full.names = TRUE) 然后combined_df &lt;- bind_rows(lapply(my_files, readRDS)) 工作。

标签: r dataframe data.table


【解决方案1】:

解决方案是两条线:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-14
    • 1970-01-01
    • 2020-10-03
    • 2012-06-15
    • 2013-06-13
    • 2014-01-28
    相关资源
    最近更新 更多