【问题标题】:"Error: $ operator is invalid for atomic vectors" in caret::train functioncaret::train 函数中的“错误:$ 运算符对原子向量无效”
【发布时间】:2020-05-16 20:03:55
【问题描述】:

我将 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")

然后出现如下错误:

错误:$ 运算符对原子向量无效

当我在 Google 中搜索时,这似乎不是由于 train 功能。

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

【问题讨论】:

  • 我想知道我的代码中的原子向量在哪里。谢谢
  • 这里是 traceback() 结果: 2. train.default(x = as.matrix(train0[, -c(which(names(train0) == "SalePrice"))]), y = train0$SalePrice, method = "glmnet", trControl = "control", tuneGrid = "lassogrid") 1. train(x = as.matrix(train0[, -c(which(names(train0) == "SalePrice") )]), y = train0$SalePrice, method = "glmnet", trControl = "control", tuneGrid = "lassogrid")
  • 有几个问题,您不需要使用引号进行控制,它被解释为字符串而不是变量。其他问题可能是由于您提供数据的方法造成的,您能否通过使用dput(head(train_df,n)) 提供数据来使问题更具重现性?

标签: r r-caret


【解决方案1】:

错误在这里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 作为您的数据。

【讨论】:

    猜你喜欢
    • 2021-07-11
    • 2015-10-02
    • 1970-01-01
    • 2021-10-20
    • 2020-06-21
    • 2021-11-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多