代码之家  ›  专栏  ›  技术社区  ›  JFG123

将多个.rda文件加载到r中的列表中

  •  1
  • JFG123  · 技术社区  · 6 年前

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

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

    我现在想把它们重新加载到r中并进行比较。不幸的是,当我编写初始模型脚本时,每个模型都存储为相同的ie“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)
    
    1 回复  |  直到 6 年前
        1
  •  1
  •   Mikko Marttila    6 年前

    目前,对现有文件的救援操作可能如下所示(按照@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)
    

    接下来,将模型另存为 .Rds 文件 saveRDS() 而不是使用 save() . 然后在加载文件时很容易重新分配。参见 this question and answer 关于这件事的更多细节。