2017-03-31 77 views
0

为什么我会遇到这个错误? tapply是什么意思?我甚至没有使用过这种方法?发生tapply错误(var,y,mean,na.rm = TRUE):参数必须具有相同的长度

错误:naive_model < -naiveBayes(X_train,Y_train)

错误:

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

CODE:

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 
+0

首先,指出引起此错误的行很重要。其次,如果你提供一个可以得到这个结果的工作示例数据集,这将会很有帮助。 – lmo

+0

'tapply'是一个基本的R函数,它可能在'naiveBayes()'之类的包函数之一的幕后使用。检查文档并确保输入的长度相同。 – Parfait

回答

2

该错误指示在你naiveBayes()输入(X_trainY_train),其需要是相同的(即,对于你的X数据的每一行对应的Y值)的长度的差。从

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

我们可以看到输入的不同(第一次500与第一次100行的balance_data)。从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) 
相关问题