繁体   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