R 预测$class:$运算符中的错误对于原子向量无效

R 预测$class:$运算符中的错误对于原子向量无效,r,r-caret,predict,naivebayes,R,R Caret,Predict,Naivebayes,我试图在我自己的数据上使用朴素贝叶斯方法,该方法根据9个特征预测乳腺癌的诊断。我尝试使用70%的训练数据和30%的测试数据 这是我的密码: > BCD <- read.csv("H:/BCD.csv") > View(BCD) > trainIndex <- createDataPartition(BCD$Diagnosis, p=0.70, list=FALSE) > data_train <- BCD[ trainIndex,] > dat

我试图在我自己的数据上使用朴素贝叶斯方法,该方法根据9个特征预测乳腺癌的诊断。我尝试使用70%的训练数据和30%的测试数据

这是我的密码:

> BCD <- read.csv("H:/BCD.csv")
>   View(BCD)
> trainIndex <- createDataPartition(BCD$Diagnosis, p=0.70, list=FALSE)
> data_train <- BCD[ trainIndex,]
> data_test <- BCD[-trainIndex,]
#train a naive bayes model
> model <- naiveBayes(Diagnosis~., data=data_train)
#make predictions
> predictions <- predict(model, data_test[,1:9])
#summarize results
> confusionMatrix(predictions$class, data_test$Diagnosis)
你知道这意味着什么,或者我如何修复它吗

以下是我的数据样本,希望能有所帮助:

> dput(head(BCD))
structure(list(Clump.Thickness = c(5L, 5L, 3L, 6L, 4L, 8L), Uniformity.of.Cell.Size = c(1L, 
4L, 1L, 8L, 1L, 10L), Uniformity.of.Cell.Shape = c(1L, 4L, 1L, 
8L, 1L, 10L), Marginal.Adhesion = c(1L, 5L, 1L, 1L, 3L, 8L), 
    Single.Epithelial.Cell.Size = c(2L, 7L, 2L, 3L, 2L, 7L), 
    Bare.Nuclei = c(1L, 10L, 2L, 4L, 1L, 10L), Bland.Chromatin = c(3L, 
    3L, 3L, 3L, 3L, 9L), Normal.Nucleoli = c(1L, 2L, 1L, 7L, 
    1L, 7L), Mitoses = c(1L, 1L, 1L, 1L, 1L, 1L), Diagnosis = c(1L, 
    1L, 1L, 1L, 1L, 2L)), .Names = c("Clump.Thickness", "Uniformity.of.Cell.Size", 
"Uniformity.of.Cell.Shape", "Marginal.Adhesion", "Single.Epithelial.Cell.Size", 
"Bare.Nuclei", "Bland.Chromatin", "Normal.Nucleoli", "Mitoses", 
"Diagnosis"), row.names = c(NA, 6L), class = "data.frame")
请试试这个:

BCD$Diagnosis = as.factor(BCD$Diagnosis)
trainIndex <- createDataPartition(BCD$Diagnosis, p=0.70, list=FALSE)
data_train <- BCD[ trainIndex,]
data_test <- BCD[-trainIndex,]
#train a naive bayes model
model <- naiveBayes(Diagnosis~., data=data_train)
#make predictions
predictions <- predict(model, data_test[,1:9])
#summarize results
confusionMatrix(predictions, data_test$Diagnosis)
BCD$Diagnosis=as.factor(BCD$Diagnosis)

trainIndex我通过这样做最终找到了答案:


我改变了这一点:
$运算符对原子向量无效

这个错误的真正含义是:

R运行时尝试对完全不支持$behavior的对象执行$operation。例如,单个字符串或整数。请参阅此R端子输出:

> s="Gucci Mane"
> s$artistName
Error in s$artistName : $ operator is invalid for atomic vectors
> t=list(artistName="Gucci Mane", realName="Radric Davis")
> t$artistName
[1] "Gucci Mane"
如果出现此错误,则很可能执行了返回错误对象的查找操作

是什么让这个错误变得非常混乱:

  • 您可能会遇到类似“未找到属性s$artistName”的错误。但是运行时甚至没有尝试解析$。它发现所讨论的对象根本不支持$操作,并将其报告为错误
  • 在整个开发人员世界中,“原子”的意思是“一个永远不会被线程或进程上下文切换中断的操作”,但在R,oh joy中,它的意思类似于“不支持收集行为的原始数据类型”
  • 您在google上找到的一些帮助主题表明,这个错误与递归有关,这是胡说八道。充其量你的递归返回了错误的东西

@R语言的开发人员,FeatureRequest:错误消息中包含一些关于你做错了什么以及在哪里的上下文,这将大大节省时间

无论如何,我都不是这方面的专家,但在您给出的示例中,对象“预测”是空的。因此,错误一定与
predict(model,data\u test[,1:9])
有关。看起来您的预测并不像您预期的那样生成,但我不知道为什么。
> s="Gucci Mane"
> s$artistName
Error in s$artistName : $ operator is invalid for atomic vectors
> t=list(artistName="Gucci Mane", realName="Radric Davis")
> t$artistName
[1] "Gucci Mane"