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

Error in 1:nrow(newdata) : argument of length 0 while using SVM predict

我正在尝试根据 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(...)...)

我怀疑 featvecs 只有一列,所以 featvecs[f,] 的长度是 1

然后test[,featvecs[f,]]输出一个向量而不是预期的data.frame(参见mtcars[, "mpg"]mtcars[, "mpg", drop = FALSE]之间的区别),并将nrow()应用于a向量输出 NULL: svm.predict() 源代码中的 1:nrow(newdata) 给出 1:NULL 导致你的错误。

尝试将 drop = FALSE 添加到 test[,featvecs[f,], drop = FALSE] 以便获得 data.frame.