2017-03-31 67 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

まず、このエラーの原因となっている行を示すことが重要です。第2に、この結果を得るための実際のサンプルデータセットを提供すると役に立ちます。 – lmo

+0

'tapply'はbase R関数で、' naiveBayes() 'のようなパッケージ関数のシーンの背後で使用される可能性があります。ドキュメントをチェックし、入力が同じ長さであることを確認してください。 – Parfait

答えて

2

エラーが同じになるように(すなわち、あなたのXデータのすべての行に対応するY値)を必要とするあなたのnaiveBayes()入力(X_trainY_train)の長さの差を示しています。

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

から、我々は、入力が(第一balance_dataの100行対第一500)を異なる見ることができます。対応する行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) 
関連する問題