1:nrow(newdata)中的错误:使用SVM时的长度为0的参数预测

时间:2016-10-13 06:32:14

标签: r machine-learning svm predict rscript

我正在尝试根据svm训练的模型预测A值。 这就是我的列车和测试数据的样子:

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

代码片段如下:

  

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,]])
}

我收到了svm.predict行的以下错误,我不确定为什么?

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

列车数据的结构:

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

测试数据的结构:

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

1 个答案:

答案 0 :(得分:0)

我怀疑featvecs只有一列,因此featvecs[f,]的长度为1

然后test[,featvecs[f,]]输出一个向量而不是预期的data.frame(请参阅mtcars[, "mpg"]mtcars[, "mpg", drop = FALSE]之间的差异),nrow()应用于向量输出{{ 1}}:NULL的源代码中的1:nrow(newdata)会导致您的错误svm.predict()

尝试将1:NULL添加到drop = FALSE,以便获得data.frame。