【问题标题】:Error in tapply(var, y, mean, na.rm = TRUE) : arguments must have same lengthtapply 中的错误(var,y,mean,na.rm = TRUE):参数必须具有相同的长度
【发布时间】:2017-03-31 23:41:38
【问题描述】:

为什么会出现此错误?是什么意思?那个方法我都没用过?

发生错误:naive_model

错误:

Error in tapply(var, y, mean, na.rm = TRUE) : 
  arguments must have same length

代码:

  library(e1071)
  #Naive Bayes
  #Learn Time
  start.time <- Sys.time()
  naive_model <-naiveBayes(X_train,Y_train)
  end.time <- Sys.time()
  time.taken <- end.time - start.time
  naivebayes_Learnruntime[i]<- time.taken

  #Prediction Time
  start.time <- Sys.time()
  pred = predict(naive_model,X_test)
  end.time <- Sys.time()
  time.taken <- end.time - start.time
  naivebayes_Predictruntime [i]<- time.taken

dataset

整个代码

balance_data = read.table(file.choose(), sep=",")
attach(balance_data)
x <- balance_data[, c(2,3,4,5)]
y <- balance_data[,1]
X_train <-head(x,500)
Y_train <- head(y,100)
X_test <-tail(x,122)
str(X_train)
str(X_test)
str(Y_train)


decisionTree_Learnruntime = c()
svm_Learnruntime = c()
naivebayes_Learnruntime = c()
knn_Learnruntime = c()

decisionTree_Predictruntime = c()
svm_Predictruntime = c()
naivebayes_Predictruntime =c()
knn_Predictruntime = c()


for (i in 1:20){
  library(e1071)
  library(caret)
  #SVM Model
  start.time <- Sys.time()
  svm_model <- svm(X_train,Y_train)
  end.time <- Sys.time()
  time.taken <- end.time - start.time
  svm_Learnruntime[i]<- time.taken

  #Prediction Time
  start.time <- Sys.time()
  pred <- predict(svm_model,X_test)
  end.time <- Sys.time()
  time.taken <- end.time - start.time
  svm_Predictruntime[i]<- time.taken

  library(rpart)
  #Decision Tree
  #Learn Time
  start.time <- Sys.time()
  tree_model <- rpart(X_train,Y_train)
  end.time <- Sys.time()
  time.taken <- end.time - start.time
  decisionTree_Learnruntime[i]<- time.taken

  #Prediction Time 
  start.time <- Sys.time()
  pred = predict(tree_model,X_test)
  end.time <- Sys.time()
  time.taken <- end.time - start.time
  decisionTree_Predictruntime[i] <- time.taken


  library(e1071)
  #Naive Bayes
  #Learn Time
  start.time <- Sys.time()
  naive_model <-naiveBayes(X_train,Y_train)
  end.time <- Sys.time()
  time.taken <- end.time - start.time
  naivebayes_Learnruntime[i]<- time.taken

  #Prediction Time
  start.time <- Sys.time()
  pred = predict(naive_model,X_test)
  end.time <- Sys.time()
  time.taken <- end.time - start.time
  naivebayes_Predictruntime [i]<- time.taken



}

svm_Learnruntime
svm_Predictruntime
decisionTree_Learnruntime
decisionTree_Predictruntime
naivebayes_Learnruntime
naivebayes_Predictruntime

【问题讨论】:

  • 首先,指出导致此错误的行很重要。其次,如果您提供一个可以得到此结果的工作示例数据集,将会很有帮助。
  • tapply 是一个基本的 R 函数,它可能在 naiveBayes() 等包函数之一的幕后使用。检查文档并确保输入的长度相同。

标签: r


【解决方案1】:

该错误表明您的naiveBayes() 输入(X_trainY_train)的长度不同,它们需要相同(即,x 数据的每一行都有一个对应的 y 值)。来自

X_train <- head(x,500)
Y_train <- head(y,100)

我们可以看到输入不同(balance_data 的第 500 行与第 100 行)。从X_train 的相应行将结果数据分配给Y_train 将解决此错误消息。例如,您可以使用:

trainset <- 1:500  # to be similar to your 'head(x,500)'

# create train/test 
X_train <- balance_data[trainset, -1]  
Y_train <- balance_data[trainset, 1]   
X_test <- balance_data[-trainset, -1]   

# model and predict
naive_model <- naiveBayes(X_train, Y_train)
pred <- predict(naive_model, X_test)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-12-19
    • 2021-09-25
    • 1970-01-01
    • 2019-05-04
    • 2021-07-12
    • 2017-06-22
    • 1970-01-01
    • 2023-03-16
    相关资源
    最近更新 更多