r语言 - 当对 kNN 使用"插入符号"时,我得到"术语中的错误.formula(formu



我正在尝试使用caret来找到对某些数据进行kNN分析的最佳k

library(tidyverse)
library(caret)
# Read and clean up the data
ugriz  <- read.table("QSOs_1st_50k.dat-mags.dat")
ugriz[ugriz == -999] <- NA
fields <- c('name', 'z','delta_z','NED_class','SDSS_class','no_radio','radio_max','no_UV', 'UV_min',
'u', 'g', 'r', 'i', 'z_mag', 'I', 'J', 'H', 'K', 'W1', 'SPIT_5',
'W2', 'SPIT_8', 'W3', 'W4', 'NUV', 'FUV')
names(ugriz) <- fields
sample_n(ugriz, 5)
attach(ugriz)
# Randomly split the dataset into training and testing subsets
set.seed(123) # for reproducible randomness in producing training and test sets
training.samples <- z %>% createDataPartition(p=0.5, list = FALSE)
train.data <- ugriz[training.samples]
test.data <- ugriz[-training.samples]
model <- train(z~., data = train.data, method = "knn",
trControl = trainControl("cv", number = 10),
preProcess = c("center","scale"),
tuneLength = 10)

我的目标是根据列"u"、"g"、"r"、"i"、"z_mag"、"I"、"J"、"H"、"K"、"W1"、"SPIT_5"、"W2"、"SPIT_8"、"W3"、"W4"、"NUV"、"FUV"的量级值测试z的预测,但我不断遇到错误

Error in terms.formula(formula, data = data) : 
'.' in formula and no 'data' argument

如果我将公式更改为类似

model <- train(z~u, data = train.data, method = "knn",
trControl = trainControl("cv", number = 10),
preProcess = c("center","scale"),
tuneLength = 10) # Gives error

我得到

Error in eval(predvars, data, env) : 
invalid 'envir' argument of type 'character'

我正在使用 RStudio v 1.3.959,R v 4.0.0 谷歌搜索错误给了我指向neuralnet中相同错误的链接,但caret中没有任何内容。这里看起来在某些早期版本的 R 中存在错误。

导致错误的原因是什么?

您在数据分区中犯了一个错误。您在training.samples之后错过了","。由于您没有提供任何数据,我正在使用iris数据

library(caret)
library(tidyverse)
# Randomly split the dataset into training and testing subsets
set.seed(123) # for reproducible randomness in producing training and test sets
training.samples <- createDataPartition(iris$Species ,p=0.5, list = FALSE)
train.data <- iris[training.samples,]
test.data <- iris[-training.samples, ]
train(Species~Sepal.Length, data = train.data, method = "knn",
trControl = trainControl("cv", number = 10),
preProcess = c("center","scale"),
tuneLength = 10)

它不会给我任何错误。

最新更新