Ошибка в eval (expr, envir, enc): объект не найден

Я очень новичок в кодировании в R и не понимаю, что здесь происходит. Любая помощь будет высоко оценена.

data.train <- read.table("Assign2.WineComplete.csv",sep=",",header=T)
# Building decision tree
Train <- data.frame(residual.sugar=data.train$residual.sugar,
                total.sulfur.dioxide=data.train$total.sulfur.dioxide, 
                alcohol=data.train$alcohol,
                quality=data.train$quality)
Pre <- as.formula("pre ~ quality")

fit <- rpart(Pre, method="class",data=Train)

Я получаю следующую ошибку:

Error in eval(expr, envir, enclos) : object 'pre' not found

Ответ 1

Не знаю, почему @Janos удалил свой ответ, но он правильный: в вашем фрейме данных Train нет столбца с именем pre. Когда вы передаете формулу и кадр данных в функцию установки модели, имена в формуле должны ссылаться на столбцы в фрейме данных. В вашем Train есть столбцы с именами residual.sugar, total.sulfur, alcohol и quality. Вам нужно изменить формулу или фрейм данных, чтобы они соответствовали друг другу.

И просто уточнить: pre - это объект, содержащий формулу. Эта формула содержит ссылку на переменную pre. Это последнее, которое должно соответствовать кадру данных.

Ответ 2

Просто добавьте к этому; Это может произойти, если вы не приложите свой набор данных Просто потратил полтора часа на то, чтобы понять это.

Приветствия

Ответ 3

Я думаю, что получил то, что искал.

data.train <- read.table("Assign2.WineComplete.csv",sep=",",header=T)
fit <- rpart(quality ~ ., method="class",data=data.train)
plot(fit)
text(fit, use.n=TRUE)
summary(fit)

Ответ 4

Я использую   colname (train) = paste ( "A", colname (поезд)) и получается такая же проблема, как и ваша.

Наконец-то выяснилось, что randomForest более скупой, чем rpart, он не может распознать colname с пробелом, запятой или другой определенной пунктуацией.

Функция пасты будет добавлять "A" и "" в качестве разделителя с каждым colname. поэтому нам нужно предотвратить пространство и использовать это предложение вместо:

colname(train) = paste("A", colname(train), sep = "")

это добавит строку без пробела.