在eval(expr、envir、enclose)中预测错误:在R中找不到对象

在eval(expr、envir、enclose)中预测错误:在R中找不到对象,r,predict,R,Predict,我试图使用前面的函数预测几个模型,但是我得到了“eval中的错误(expr、envir、enclose):找不到对象‘var.1’”。这很奇怪,因为var.1不在数据帧中。代码是: library(randomForest) library(ada) library(class) library(e1071) library(rpart) library(car) library(nnet) library(kknn) Consenso <- function(DF,VAR.DEP){

我试图使用前面的函数预测几个模型,但是我得到了“eval中的错误(expr、envir、enclose):找不到对象‘var.1’”。这很奇怪,因为var.1不在数据帧中。代码是:

library(randomForest)
library(ada)
library(class)
library(e1071)
library(rpart)
library(car)
library(nnet)
library(kknn)

Consenso <- function(DF,VAR.DEP){ #entries are a dataframe and a dependent var
N1 <- sample(DF,dim(DF)[1],replace=TRUE)
N2 <- sample(DF,dim(DF)[1],replace=TRUE)
N3 <- sample(DF,dim(DF)[1],replace=TRUE)
N4 <- sample(DF,dim(DF)[1],replace=TRUE)
N5 <- sample(DF,dim(DF)[1],replace=TRUE)
mod.kknn <- train.kknn(VAR.DEP ~.,data=N1,kmax=trunc(sqrt(dim(DF)[1])))
mod.net <- nnet(VAR.DEP ~ ., data = N2, size = 10, rang = 0.1, 
                     decay = 5e-04, maxit = 400, trace = FALSE, MaxNWts  = 20000)
mod.tree <- rpart(VAR.DEP ~ ., data = N3)
mod.sv <- svm(VAR.DEP ~ ., data = N4, kernel = "linear")
mod.rf <-randomForest(VAR.DEP ~.,data= N5,ntree=400)
lista.mod <-   list("Modelo.kknn"=mod.kknn,"Modelo.Redes"=mod.net,"Modelo.Arboles"=mod.tree,"Modelo.SV"=mod.sv,"Modelo.RF"=mod.rf)
return(lista.mod)
}
#Using the function
pbiris <- Consenso(iris,iris$Species)
#Make a prediction
predict(pbiris$Modelo.kknn,iris)
#Error in eval(expr, envir, enclos) : object 'Sepal.Width.1' not found
#Var Sepal.Width.1 is not in the dataframe.
库(随机林)
图书馆(ada)
图书馆(班级)
图书馆(e1071)
图书馆(rpart)
图书馆(汽车)
图书馆(nnet)
图书馆(kknn)

Consenso很难说清楚,因为您的代码并不是完全可重复的,但几乎可以肯定的是,问题来自:

sample(DF, dim(DF)[1], rep=T)
问题是您正在对数据帧的列而不是行进行采样。考虑:

DF <- data.frame(a=1:4, b=5:8)
sample(DF, dim(DF)[1], rep=T)
由于我们的数据框的列数少于行数,如果您尝试对列进行多次采样,它将对相同的列进行多次重新采样。在我们的测试中,我们对列
b
进行了三次重新采样,得到
b
b.1
b.2
。当然,原始数据帧没有额外的列,因此
predict
调用失败

请记住,
data.frame
对象是列表,因此您只需对列表中的元素进行采样。要对行进行采样,请执行以下操作:

DF[sample(nrow(DF)), ]
DF[sample(nrow(DF)), ]