【问题标题】:How to coerce a list object to type 'integer', Error in R如何强制列表对象键入“整数”,R中的错误
【发布时间】:2019-02-20 04:02:05
【问题描述】:

我是使用 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')

当我运行最后一行时,它会抛出上面的错误消息。谁能帮帮我! 非常感谢。

【问题讨论】:

    标签: r data-science


    【解决方案1】:

    看起来您的自变量之一是字符串或因子变量,并且都必须是数字。请参阅下面的我的玩具数据集。包含所有变量时出现相同的错误;但是,当我取出 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')
    

    【讨论】:

    • 哦,我终于知道哪个变量不是数字格式了。非常感谢您帮助我解决此错误!
    • @CườngNguyễn 我也有同样的问题。我检查了所有列“类”,它们都是“数字”。但是,我仍然遇到这个问题。
    猜你喜欢
    • 1970-01-01
    • 2022-06-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-30
    • 2020-11-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多