2017-02-20 45 views
1

我一直在试图利用iris数据集,尽管我已经从e1071库获得svm的工作,但是当我尝试制作时,我总是收到'可变长度差异'错误tune工作:库(e1071),调谐可变长度不同

library(e1071) 

data <- data.frame(iris$Sepal.Width,iris$Petal.Length,iris$Species) 
svm_tr <- data[sample(nrow(datasvm), 100), ] #sample 100 random rows 

tuned <- tune(svm, svm_tr$iris.Species~., 
       data = svm_tr[1:2], 
       kernel = "linear", 
       ranges = list(cost=c(.001,.01,.1,1,10,100))) 

我已经检查每一列的长度在svm_tr[1:2]和他们是一样的长度。我知道该函数并不直接采用数据框,但也许我错过了一些东西?

+0

你的第二行创建变量'data',但你的第三行使用'datasvm'它们是同一个东西吗? – G5W

+0

刚刚修好 - 是的。 – jmb277

+4

我可以用'tune(svm,iris.Species〜。,data = svm_tr [1:3],kernel =“linear”,ranges = list(cost = c(.001,.01,.1 ,1,10,100)))' - 如果它是一个公式接口,您不应该使用'$'来引用变量。请注意,我也制作了'data = svm_tr [1:3]'而不是'1:2',这样就找到了'iris.Species'列。 – thelatemail

回答

2

我可以得到它一起工作:

tune(svm, iris.Species ~ ., data = svm_tr[1:3], 
    kernel = "linear", ranges = list(cost=c(.001,.01,.1,1,10,100))) 

如果这是你不应该使用$所有必需的变量从由data=指定的对象源被引用变量的公式接口论据。请注意,我也制作了data=svm_tr[1:3]而不是1:2,以便包含iris.Species列。

+0

就是这样!谢谢! – jmb277