2017-02-20 4 views
1

Я пытаюсь использовать набор данных iris, и хотя я получил svm для работы из библиотеки e1071, я продолжаю получать ошибку «с переменной длиной» при попытке сделать tune работа:library (e1071), tune Переменная длина отличается

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 ", range = 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

Смежные вопросы