web-dev-qa-db-fra.com

Erreur dans eval (expr, envir, enclos): objet non trouvé

Je ne peux pas comprendre ce qui ne va pas ici.

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)

Je reçois l'erreur suivante :

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

Je ne sais pas pourquoi @Janos a supprimé sa réponse, mais elle est correcte: votre bloc de données Train ne comporte pas de colonne nommée pre. Lorsque vous transmettez une formule et un bloc de données à une fonction d'ajustement de modèle, les noms de la formule doivent faire référence à des colonnes du bloc de données. Votre Train a des colonnes appelées residual.sugar, total.sulfur, alcohol et quality. Vous devez modifier votre formule ou votre bloc de données afin qu'ils soient cohérents les uns avec les autres.

Et juste pour clarifier: Pre est un objet contenant une formule. Cette formule contient une référence à la variable pre. C'est ce dernier qui doit être cohérent avec le bloc de données.

17
Hong Ooi

Juste pour ajouter à cela; Cela peut arriver si vous n'attachez pas votre jeu de données. Vous venez de perdre une demi-heure à le comprendre également.

À votre santé

12

Je pense avoir ce que je cherchais ..

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)
1
Rads

j'utilise colname (train) = coller ("A", colname (train)) et il s'avère que le même problème que le vôtre.

Je me suis enfin rendu compte que randomForest est plus radin que rpart, il ne peut pas reconnaître le nom de la colonne avec un espace, une virgule ou une autre ponctuation spécifique.

la fonction paste ajoutera "A" et "" comme séparateur avec chaque nom de fichier. nous devons donc éviter l'espace et utiliser cette phrase à la place:

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

cela préfixera une chaîne sans espace.

0
ZHENKAI