eval 中的错误(predvars、data、env):找不到对象“Rm”

Posted

技术标签:

【中文标题】eval 中的错误(predvars、data、env):找不到对象“Rm”【英文标题】:Error in eval(predvars, data, env) : object 'Rm' not found 【发布时间】:2018-11-05 11:15:36 【问题描述】:
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 列,但我不断得到

即使我指定 test_set[3] 而不是 test_set[1] 包含 Rm

列名如下:RmLstatMedv

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 是否是一个数据框。

【问题讨论】:

我解决了这个问题。 我遇到了类似的问题,归结为修复列名 我有同样的问题,在清除环境 (rm(list = ls())) 并重新运行代码后消失。 【参考方案1】:

正如您提到的,您可以按如下方式删除该列

y_pred = predict(classifier, newdata = test_set[-3], type ='class')

如果它对另一个 col.name 给出相同的错误,您可以使用

y_pred = predict(classifier, newdata = test_set[, -c(3,5)], type ='class')

【讨论】:

【参考方案2】:

请参考此链接中的教程:Error in 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
    

【讨论】:

【参考方案3】:

我通过以下代码解决了问题

y_pred = predict(classifier, newdata = test_set[-3], type ='class')

https://www.rdocumentation.org/packages/rpart/versions/4.1-13/topics/predict.rpart 引用 R 文档

“newdata:包含需要预测值的数据框。公式(对象)右侧引用的预测变量必须按名称存在于newdata中。如果缺少,则返回拟合值。”

【讨论】:

以上是关于eval 中的错误(predvars、data、env):找不到对象“Rm”的主要内容,如果未能解决你的问题,请参考以下文章

R语言glm模型预测(predict)过程及Error in eval(predvars, data, env) 错误原因

R中数据帧的列循环

$.ajax中的eval及dataType

eval(data)和eval("("+data+")")的区别

R:数字“环境”参数在预测()中不是长度为一

var result = eval('(' + data + ')');的学习