r - 如何强制列表对象键入“整数”,R中的错误
问题描述
我是使用 R 进行数据挖掘和机器学习的新手。在我研究 Naive Bayes Classified 时,我遇到了这个错误:
“错误其中((sapply(newdata [ind_factor],nlevels)!= sapply(tables [ind_factor],:(列表)对象不能被强制输入'整数'”
这是我的代码:
data <- read.csv(file.choose(),header = T)
str(data)
set.seed(1234)
splitData <- sample(2,nrow(data),replace = T,prob = c(0.8,0.2))
train<-data[splitData == 1,]
test <- data[splitData == 2,]
mdl <- naive_bayes(admit ~ .,data = train)
predicted <- predict(mdl, train, type = 'prob')
当我运行最后一行时,它会抛出上面的错误消息。谁能帮帮我!非常感谢。
解决方案
看起来您的自变量之一是字符串或因子变量,并且都必须是数字。请参阅下面的我的玩具数据集。包含所有变量时出现相同的错误;但是,当我取出 var4 (其中变量是字符串)时,它可以工作)。
如果要使用变量,可以将字符串变量转换为因子,然后将因子转换为数值变量(这将捕获因子的基础值)。
library(naivebayes)
#data <- read.csv(file.choose(),header = T)
data <- data.frame(admit = sample(100, x=c(F,T), prob=c(.5,.5), replace=T),
var1 = sample(100, x=1:4, replace=T),
var2 = sample(100, x=1:3, replace=T),
var3 = sample(100, x=1:3, replace=T),
var4 = sample(100, x=c("s1", "s2"), replace=T))
str(data)
set.seed(1234)
splitData <- sample(2,nrow(data),replace = T,prob = c(0.8,0.2))
train<-data[splitData == 1,]
test <- data[splitData == 2,]
# Doesn't work
mdl <- naive_bayes(admit ~ .,data = train)
predicted <- predict(mdl, train, type = 'prob')
# Works
mdl <- naive_bayes(admit ~ var1 + var2 + var3,data = train)
predicted <- predict(mdl, train, type = 'prob')
# Convert string to factor then numeric
train$var4 <- as.numeric(as.factor(train$var4))
mdl <- naive_bayes(admit ~ .,data = train)
predicted <- predict(mdl, train, type = 'prob')
推荐阅读
- javascript - 未设置 JQuery 验证
- jenkins - Jenkins 上的 EFS 恢复需要很多小时
- scala - 使用 HLists 的映射不会编译
- python - 如何在多处理程序中提取包
- css - 如何使文本和背景图像(“封面”不完全有帮助)遵循浏览器的大小?
- mongodb - 无法从 Virtualbox 连接到 MongoDB Atlas Cluster
- angular - *ngif 在主页上不显示主页链接
- vba - 如何用相同长度的空格替换选定范围内的文本?
- python - 我是否进入了无限递归循环?
- asp.net-core-mvc - 如何使用 Swashbuckle 的 SwaggerUI 显示静态 swagger.json 文件而不是 SwaggerGen 的动态创建的定义?