首页 > 解决方案 > 如何在 for 循环中定义模型名称?

问题描述

我想在不同的样本上训练 n 个随机森林。样品 1 给出 rf1,样品 2 给出 rf2,以此类推。

但是这种代码不起作用(“闭包”类型的错误对象不是子集)

for (i in 1:3) {
       rf$i <- train(Y~.,data=trainingData,method="rf",
              ntree = 100,
              tuneGrid=data.frame(mtry = mtry),
              trControl = controle,
              metric='ROC')
}

如何创建 n 个随机森林模型?此致 Loïc

标签: r

解决方案


它不起作用,因为rf尚不存在并且您不能对其进行子集化。

1. 使用列表作为容器

以下应该工作。

# define the length of your random forest trials
N = 3
rf = vector( "list", N)
for (i in seq_len( N ) {
   rf[[ i ]] <- train( Y ~. , data = trainingData, method = "rf",
          ntree = 100,
          tuneGrid=data.frame(mtry = mtry),
          trControl = controle,
          metric='ROC')
}

上面的代码存储了一个rf包含三个元素的列表Nrf[[ 1 ]]您可以使用, rf[[ 2 ]],访问每个对象rf[[ 3 ]]

2.独立存储对象

如果你想rf在你的全局环境中物理存储独立的对象,你必须使用assign()如下:

# define the length of your random forest trials
N = 3
for (i in seq_len( N ) {
       assign( paste0( "rf", i) ,
               train( Y ~. , 
                      data = trainingData, method = "rf",
                      ntree = 100,
                      tuneGrid=data.frame(mtry = mtry),
                      trControl = controle,
                      metric='ROC')
    }

这将三个对象rf1rf2和存储rf3在您的环境中,您可以独立处理它们。


推荐阅读