簡體   English   中英

公式錯誤且 R 中沒有數據參數

[英]Error in formula and no data argument in R

我正在使用帶有多項式 kernel 的 sim 編寫代碼。 代碼如下。

library(ISLR)
library(e1071)
library(randomForest)
library(class)
library(ggplot2)
library(GGally)

train = subset(wifiLocDat, Loc3 == TRUE)
test  = subset(wifiLocDat, Loc3 == FALSE)
set.seed(4343)
tune.out <- tune(svm, wifiLocDat$Loc3~wifiLocDat$WiFi1 + wifiLocDat$WiFi2 + wifiLocDat$WiFi3 + wifiLocDat$WiFi4 + wifiLocDat$WiFi5 + wifiLocDat$WiFi6 + wifiLocDat$WiFi7, data=wifiLocDat,       kernel="polynomial", ranges=list(degree=c(1,2,3,4,5,6)))
summary(tune.out)
svmPoly <- svm(Train$Loc3~., data=Train, kernel="polynomial",coef0=1,degree = 3)

dput(head(wifiLocDat,20))結構(列表(WiFi1 = c(-64L,-68L,-63L,-61L,-63L,-64L,-65L,-61L,-65L,-62L,-67L, -65L, -63L, -66L, -61L, -67L, -63L, -60L, -60L, -62L), WiFi2 = c(-56L, -57L, -60L, -60L, -65L, -55L, -61L, -63L, -60L, -60L, -61L, -59L, -57L, -60L, -59L, -60L, -56L, -54L, -58L, -59L), WiFi3 = c(-61L, -61L、-60L、-68L、-60L、-63L、-65L、-58L、-59L、-66L、-62L、-61L、-61L、-65L、-65L、-59L、-60L、-59L , -60L, -63L), WiFi4 = c(-66L, -65L, -67L, -62L, -63L, -66L, -67L, -66L, -63L, -68L, -67L, -67L, -65L , -62L, -63L, -61L, -62L, -65L, -61L, -64L), WiFi5 = c(-71L, -71L, -76L, -77L, -77L, -76L, -69L, -74L , -76L, -80L, -77L, -72L, -73L, -70L, -74L, -71L, -70L, -73L, -73L, -70L), WiFi6 = c(-82L, -85L, -85L , -90L, -81L, -88L, -87L, -87L, -86L, -86L, -83L, -86L, -84L, -85L, -89L, -86L, -84L, -83L, -84L, - 84L), WiFi7 = c(-81L, -85L, -84L, -80L, -87L, -83L, -84L, -82L, -82L, -91L, -91L, -81L, -84L, -83L, - 87L,-91L,-91L,-84L,-88L,-84L),Loc3 =結構(c(1L,1L,1L,1L,1L,1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L), .Label = c("假", "真"), ZA2F2ED4F8EBC2CBB4C21A29D)DC , row.names = c(NA, 20L), class = "data.frame")

我得到了錯誤: terms.formula(formula, data = data): '.' 中的錯誤在公式中,沒有“數據”參數

我究竟做錯了什么?

您的代碼存在一些問題:首先,我認為根據結果的值在訓練和測試中拆分數據不是一個好主意。 這樣,您的訓練將不會包含結果的所有級別,對於測試集也是如此。

在這里,我發布了一個沒有問題的示例(我必須在數據中添加缺失的級別,因為很明顯,你的 data.frame 的前 20 行在結果中不包含 TRUE 值):

#for the crateDataPartition function
library(caret)

#add some TRUE in the outcome
wifiLocDat$Loc3 <- c(rep(F,10),rep(T,10))
#transform back to factor
wifiLocDat$Loc3 <- as.factor(wifiLocDat$Loc3)
#create index for data splitting
ind <- createDataPartition(wifiLocDat$Loc3,p=0.7,list = F)
train<- wifiLocDat[ind,]
test <- wifiLocDat[-ind,]

set.seed(4343)
tune.out <- tune("svm",Loc3~.,data = wifiLocDat,kernel="polynomial", ranges=list(degree=c(1,2,3,4,5,6)))
summary(tune.out)
svmPoly <- svm(Loc3~., data=train, kernel="polynomial",coef0=1,degree = 3)

在這里,一切都沒有問題。

但是,使用您發布的示例數據,我無法重現您的錯誤,但是當我運行您的代碼時,我收到另一個錯誤

predict.svm(ret, xhold, decision.values = TRUE) 中的錯誤:Model 為空!

我認為是因為您沒有訓練集中結果的所有可能值

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM