"Error: $ operator is invalid for atomic vectors" in caret::train function

"Error: $ operator is invalid for atomic vectors" in caret::train function

我将 R 用于数据科学,我的模型使用 caret::train() 函数进行训练。

但这是我的错误

control <- trainControl(method="cv", number=10)

lassogrid <- expand.grid(
    alpha=1, lambda=seq(0.001, 0.1, by=0.0005)
)

lasso_model <- train(x=train0[,-c(which(names(train0)=="SalePrice"))], 
                y=train0$SalePrice, method = "glmnet", trControl="control", 
               tuneGrid="lassogrid")

然后出现如下错误:

Error: $ operator is invalid for atomic vector

正如我在 Google 中搜索的那样,这似乎不是火车功能造成的。

但我不知道原子向量到底是什么。所以请让我知道为什么以及如何解决这个问题。

错误在这里 trControl="control"tuneGrid="lassogrid"。它应该是 trControl=controltuneGrid=lassogrid 并且不需要指定 x 和 y。由于您没有提供数据,我使用的是 mlbench 包中的 BostonHousing 数据。您可以使用以下代码

library(mlbench)
library(caret)

data <- BostonHousing

# create a list of 70% of the rows in the original dataset we can use for training
set.seed(123)
training <- sample(nrow(data), 0.7 * nrow(data))

train0 <- data[training,]
test0 <- data[-training,]


control <- trainControl(method="cv", number=10)

lassogrid <- expand.grid(
  alpha=1, lambda=seq(0.001, 0.1, by=0.0005)
)


lasso_model <- train(medv~., data= train0, method="glmnet", trControl=control, 
                     tuneGrid=lassogrid)

代替 medv,只需使用 SalePrice 作为您的数据。