【发布时间】:2013-07-20 02:22:05
【问题描述】:
我正在对数据集运行各种建模算法。通过将输入变量一次建模为我的响应,我得到了最好的结果,例如:
model <- train(y ~ x1 + x2 + ... + xn, ...)
一旦我训练了我的模型,我不想每次都重新运行它们,所以我一直在尝试将它们保存为 .rda 文件。这是一个随机森林模型的示例循环(请随意提出比循环更好的方法!):
# data_resp contains my measured responses, one per column
# data_pred contains my predictors, one per column
for (i in 1:ncol(data_resp)) {
model <- train(data_pred_scale[!is.na(data_resp[, i]), ],
data_resp[!is.na(data_resp[, i]), i],
method = "rf",
tuneGrid = data.frame(.mtry = c(3:6)),
nodesize = 3,
ntrees = 500)
save(model, file = paste("./models/model_rf_", names(data_resp)[i], ".rda", sep = ""))
但是,当我加载模型时,它将被称为 model。
我还没有找到一个很好的方法来保存具有相应名称的模型,以便稍后尝试参考它。我发现可以将对象分配给这样的字符串:
assign(paste("./models/model_rf_", names(data_resp)[i], ".rda", sep = ""), train(...))
但我仍然不知道如何在保存对象时引用它:
save(???, file = ...)
我不知道如何通过自定义名称调用对象。
最后,即使加载也出现了问题。我试过assign("model_name", load("./model.rda")),但结果对象string 最终只包含对象名称“模型”的字符串。
环顾四周,我发现了THIS 问题,这似乎是相关的,但我正试图弄清楚如何将其应用于我的情况。
我可以创建一个列表,其中包含data_resp(我测量的响应)中每个列名的名称,然后使用lapply 来使用train(),但我仍然有点卡在如何动态引用保存结果模型的新对象名称。
【问题讨论】:
-
您关于 save() 的具体问题可以通过阅读文档并注意第二个参数来回答。
-
在这种情况下尝试使用
saveRDS和readRDS,它会简化很多事情。
标签: r loops variable-assignment