2016-10-13 1 views
0

J'essaie de prédire les valeurs A basées sur le modèle entraîné par svm. Voici comment mon train et les données de test ressemble à:Erreur dans 1: nrow (newdata): argument de longueur 0 en utilisant SVM prédit

A  B C  D 
r00 r01 r02 r03 
... ... ... ... 

Code Snippet est donné ci-dessous:

featvecs = [ "B"]

for (f in 1:nrow(featvecs)) { 
    tuned <- svm(A ~., data = train[,c("A",featvecs[f,])], gamma = 0.01, cost = 10, kernel= "radial") 
    svm.predict <- predict(tuned, test[,featvecs[f,]]) 
} 

Je suis obtenir l'erreur suivante pour la ligne svm.predict et ne suis pas vraiment sûr pourquoi?

Error in 1:nrow(newdata) : argument of length 0 

Structure de données de train:

structure(list(A = structure(6L, .Label = c("'1'", 
"'2'", "'3'"), class = "factor"), B = structure(15L, .Label = c(...)...) 

Structure de données de test:

structure(list(A = structure(2L, .Label = c("'1'", 
"'2'", "'3'"), class = "factor"), B = structure(17L, .Label = c(...)...) 
+0

C'est utile si vous pouvez fournir un petit exemple de l'ensemble du processus que vous traversez - en particulier un petit sous-ensemble de vos données 'dput (head (train))'. – zacdav

Répondre

0

Je soupçonne featvecs n'a qu'une seule colonne, de sorte que featvecs[f,] est de longueur 1.

Ensuite test[,featvecs[f,]] délivre un vecteur au lieu du data.frame attendu (voir la différence entre mtcars[, "mpg"] et mtcars[, "mpg", drop = FALSE]) et nrow() appliquée à un vecteur de sorties NULL: 1:nrow(newdata) dans le code source de svm.predict() donne 1:NULL qui provoque votre erreur. Essayez d'ajouter drop = FALSE à test[,featvecs[f,], drop = FALSE] afin d'obtenir un nom de données

+0

Merci beaucoup. Travaillé comme un charme. – user2991421