2017-03-31 1 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'는'naiveBayes()'와 같은 패키지 함수 중 하나의 장면 뒤에서 사용될 수있는 기본 R 함수입니다. 문서를 점검하고 입력이 동일한 길이인지 확인하십시오. – Parfait

답변

2

오류가 동일하게 (즉, 사용자의 X 데이터의 각 행에 대해 대응하는 Y 값)이 필요하여 naiveBayes() 입력 (X_trainY_train)의 길이 차이를 나타낸다.

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

에서 우리는 입력이 (1 balance_data의 100 행 대 1 (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) 
관련 문제