gpt4 book ai didi

r - 使用 R 以编程方式命名对象的最佳方法?

转载 作者:行者123 更新时间:2023-12-03 20:20:53 25 4
gpt4 key购买 nike

我在数据集上运行各种建模算法。通过一次一个地将我的输入变量建模为我的响应,我获得了最好的结果,例如:

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() ,但我仍然对如何动态引用新对象名称以保留结果模型感到困惑。

最佳答案

保存模型时,请保存另一个名为“name”的对象,它是您要命名的事物的字符串:

> d=data.frame(x=1:10,y=rnorm(10))
> model=lm(y~x,data=d)
> name="m1"
> save(model,name,file="save1.rda")
> d=data.frame(x=1:10,y=rnorm(10))
> model=lm(y~x,data=d)
> name="m2"
> save(model,name,file="save2.rda")

现在每个文件都知道它想要调用它的结果对象。你如何在负载上恢复它?加载到新环境中,并分配:
> e=new.env()
> load("save1.rda",env=e)
> assign(e$name,e$model)
> summary(m1)

Call:
lm(formula = y ~ x, data = d)

您现在可以安全地 rm 或重新使用 'e' 对象。您当然可以将其包装在一个函数中:
> blargh=function(f){e=new.env();load(f,env=e);assign(e$name,e$model,.GlobalEnv)}
> blargh("save2.rda")
> m2

Call:
lm(formula = y ~ x, data = d)

请注意,这是一件双重坏事——首先,您应该将所有模型存储在一个文件中作为一个带有名称的列表。其次,这个函数有副作用,如果你有一个叫做 m2 的对象它已经会被踩到了。

使用 assign像这样几乎总是一个标志(dyswidt?),你应该使用列表来代替。

关于r - 使用 R 以编程方式命名对象的最佳方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17769121/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com