【问题标题】:Loading in multiple .rda files into a list in r将多个 .rda 文件加载到 r 中的列表中
【发布时间】:2018-12-31 14:41:09
【问题描述】:

我已经运行了各种模型(glm、rpart、earth 等)并将模型对象从每个模型导出到我计算机上的文件夹中。所以我现在有一个文件夹,里面有大约 60 个不同的模型存储为单独的 .rda 文件。

这是通过创建一个模型函数,然后通过 purrr 映射包将其应用于模型类型列表来完成的(以避免错误和终止)。

我现在想将它们加载回 r 并进行比较。不幸的是,当我编写我的初始模型脚本时,每个模型都存储为相同的,即“Model.Object”(我不知道该怎么做)所以当我尝试将每个模型单独加载到 r 中时,它只会相互覆盖。每个文件都保存为 glm.rda、rpart.rda、earth.rda 等,但其中的模型标记为 Model.Object(用于说明)。

所以我想我有几个问题; 1. 可以将多个 .rda 文件加载到 r 中,然后将其编入索引 2. 如何修改已应用的模型函数,使“model.object”名称读取为模型类型(如glm、rpart等)

代码:

    Model.Function = function(Model.Type){

  set.seed(0)
  Model.Output = train(x = Pred.Vars.RVC.Data, y = RVC, trControl = Tcontrolparam,
                       preProcess = Preprocessing.Options, tuneLength = 1, metric = "RMSE",
                       method = Model.Type)

    save(Model.Object, file = paste("./RVC Models/",Model.Type,".rda", sep = ""))

  return(Model.Object)

}

Possibly.Model.Function = possibly(Model.Function, otherwise = "something wrong here")

result.possible = map(c("glm","rpart","earth"), Possibly.Model.Function)

【问题讨论】:

  • .Rda 文件只会将保存的对象恢复到全局环境中。如果您希望能够在加载对象时将它们分配给新名称,您应该考虑使用例如.Rds 文件,而不是 saveRDS()
  • 您应该使用saveRDS 而不是save,如前所述。如果您使用save,请查看loadenvir 参数。您可以在单独的环境中恢复对象,然后随时放置,避免覆盖。

标签: r save purrr rda


【解决方案1】:

目前,您现有文件的救援操作可能看起来像这样(遵循@nicola 关于使用envir 参数到load() 的评论):

rda2list <- function(file) {
  e <- new.env()
  load(file, envir = e)
  as.list(e)
}

folder <- "./RVC Models"
files <- list.files(folder, pattern = ".rda$")

models <- Map(rda2list, file.path(folder, files))
names(models) <- tools::file_path_sans_ext(files)

今后,使用saveRDS() 将模型保存为.Rds 文件会比使用save() 更容易。然后在加载文件时很容易重新分配。参见例如this question and answer 了解更多详情。

【讨论】:

  • 接受的答案! @Mikko Marttila 喜欢这个社区
  • @JackFahey-Gilmour 实际上看起来你还没有点击“接受”按钮 ;-)
猜你喜欢
  • 2017-11-25
  • 1970-01-01
  • 2012-02-02
  • 2019-08-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-26
  • 1970-01-01
相关资源
最近更新 更多