首页 > 解决方案 > 根据插入符号 R 中的模型选择 tuneGrid

问题描述

我尝试使用“knn”和“rpart”算法在 iris 数据集上应用 ML。这是我的代码:

library(tidyverse)
library(caret)

dataset <- iris
tt_index <- createDataPartition(dataset$Sepal.Length, times = 1, p = 0.9, list = FALSE)
train_set <- dataset[tt_index, ]
test_set <- dataset[-tt_index, ]

models <- c("knn","rpart")

fits <- lapply(models, function(model){ 
  print(model)
  train(Species ~ ., 
        data = train_set, 
        tuneGrid = case_when(model == "knn" ~ data.frame(k = seq(3,50,1)),
                             model == "rpart" ~ data.frame(cp = seq(0,0.1,len = 50))),
        method = model)
})

我想根据 lapply 中的模型设置 tuneGrid 参数。但我收到此错误:

Error in `[.data.frame`(value[[1]], rep(NA_integer_, m)) : 
  undefined columns selected 

任何帮助将不胜感激。

标签: rr-caret

解决方案


我们可以使用if/else

library(caret)    
out <- lapply(models, function(model)
   train(Species ~ ., data = train_set, 
     tuneGrid = if(model == "knn") data.frame(k = seq(3,50,1)) else 
         data.frame(cp = seq(0,0.1,len = 50)), method = model))

根据?case_when

长度为 1 或 n 的向量,与逻辑输入或输出向量的长度匹配,与第一个 RHS 的类型(和属性)相匹配。不一致的长度或类型将产生错误。


推荐阅读