web-dev-qa-db-ja.com

eval(predvars、data、env)のエラー:オブジェクト 'Rm'が見つかりません

_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'が見つかりません

Rmを含む_test_set[3]_ではなく_test_set[1]_を指定しても

列名は次のとおりです:RmLstat、およびMedv

_test_set[3]_と_test_set[2]_は同じ次のエラーを出します:

Eval(predvars、data、env)のエラー:オブジェクトRmが見つかりません

および_test_set[1]_は以下を提供します:

Eval(predvars、data、env)のエラー:オブジェクト 'Lstat'が見つかりません

私は以下を試しました:

  1. names(test_set) <- c('Rm', 'Lstat','Medv'):明示的に名前を変更しました。
  2. is.data.frame(test_set):test_setがデータフレームかどうかを確認しました。

次のコードで問題を解決しました

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に存在する必要があります。欠落している場合、近似値が返されます。"

このリンクのチュートリアルを参照してください: Error in eval(predvars、data、env)

次の2つの点に注意する必要があります。

  1. 新しいオブジェクトでdata.frameを使用しない:

    predict(my_mdl, newdata)
    Error in eval(predvars, data, env) : 
       numeric 'envir' arg not of length one
    
  2. 新しいデータフレームで同じ名前を使用しない:

    newdf2 <- data.frame(newdata)
    predict(my_mdl, newdf2)
    Error in eval(expr, envir, enclos) : object 'disp' not found
    
0
Kumar Divyesh