[英]Error in eval(predvars, data, env) : object 'Rm' not found
dataset = read.csv('dataset/housing.header.binary.txt')
dataset1 = dataset[6] #higest positive correlation
dataset2 = dataset[13] #lowest negative correlation
dependentVal= dataset[14] #dependent value
new_dataset = cbind(dataset1,dataset2, dependentVal) # new matrix
#split dataset
#install.packages('caTools')
library(caTools)
set.seed(123) #this is needed to garantee that every run will produce the same output
split = sample.split(new_dataset, SplitRatio = 0.75)
train_set = subset(new_dataset, split == TRUE)
test_set = subset(new_dataset, split == FALSE)
#Fitting Decision Tree to training set
install.packages('rpart')
library(rpart)
classifier = rpart(formula = Medv ~ Rm + Lstat,
data = train_set)
#predicting the test set results
y_pred = predict(classifier, newdata = test_set[3], type ='class')
我想预测test_set
3 列,但我不断收到
eval(predvars, data, env) 中的错误:找不到对象“Rm”
即使我指定test_set[3]
而不是包含Rm
test_set[1]
列名如下: Rm
, Lstat
和Medv
。
test_set[3]
和test_set[2]
给出相同的以下错误:
eval(predvars, data, env) 中的错误:找不到对象 Rm
和test_set[1]
给出:
eval(predvars, data, env) 中的错误:找不到对象“Lstat”
我尝试了以下方法:
names(test_set) <- c('Rm', 'Lstat','Medv')
:我明确重命名。is.data.frame(test_set)
:我检查了 test_set 是否是数据帧。我通过以下代码解决了这个问题
y_pred = predict(classifier, newdata = test_set[-3], type ='class')
来自R文档的https://www.rdocumentation.org/packages/rpart/versions/4.1-13/topics/predict.rpart引用
“newdata:包含需要预测的值的数据框。公式(对象)右侧所指的预测变量必须在newdata中按名称出现。如果缺少,则返回拟合值。”
正如您所提到的,您可以按如下方式删除该列
y_pred = predict(classifier, newdata = test_set[-3], type ='class')
如果它为另一个 col.name 给出相同的错误,您可以使用
y_pred = predict(classifier, newdata = test_set[, -c(3,5)], type ='class')
请参阅此链接中的教程: eval中的错误(predvars,data,env)
我们需要注意两点:
不在新对象中使用data.frame
:
predict(my_mdl, newdata) Error in eval(predvars, data, env) : numeric 'envir' arg not of length one
在新数据框中不使用相同的名称:
newdf2 <- data.frame(newdata) predict(my_mdl, newdf2) Error in eval(expr, envir, enclos) : object 'disp' not found
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.