dans R: Erreur dans l'est.les données.cadre(données) : - objet " n'est pas trouvé, C5.0 intrigue
Cette question est similaire à d'autres questions sur Stackoverflow (ici, ici et ici), mais suffisamment différent pour que je ne peut pas extrapoler ces réponses à mon cas.
J'ai une fonction dans laquelle je fit une C5.0 modèle et que d'essayer de tracer le modèle.
train_d <- globald[train_ind,c(features,21)]
model <- C5.0(binclass ~ .,data=train_d,trials=10)
binclass
est un nom de colonne dans ma formation/données de test (globald est un dataframe de qui je sous-ensemble des lignes avec _ind
des indices et des colonnes c(3:12,21)
, où la colonne 21 est nommé binclass
). Montage fonctionne bien. Cependant, lorsque j'ai également ajouter la ligne
plot(model,trial=0)
puis j'obtiens l'erreur suivante: Error in is.data.frame(data) : object 'train_d' not found
.
Comment est-il possible que lors de la pose du modèle, train_d
est trouvé et utilisé correctement, mais alors qu'elle préparait, train_d
est nulle part pour être trouvée? Et, de toute idée de comment résoudre ce problème. Les espaces de noms en [r], restent un mystère pour moi.
Un minimum d'exécution de l'exemple est le suivant:
f <- function(){
library(C50)
set.seed(1)
class = c(1,2)
d <- data.frame(feature1 = sample(1:10,10,replace=TRUE), feature2 = 1:10, binclass = class)
d$binclass <- as.factor(d$binclass)
model <- C5.0(binclass ~ ., data=d)
plot(model)
}
Appel f()
résultats dans l'erreur suivante: Error in is.data.frame(data) : object 'd' not found
Edit:
Selon la réponse de MrFlick, il semble que la cause de ce problème est un bug dans la C5.0 code. Il y a quelques solutions de contournement sont indiqués par Pascal et MrFlick.
Cela ne ressemble pas à un espace de noms problème tellement comme un possible problème de portée. Cependant, il n'est pas très clair à partir de l'information fournie. Vous devez inclure une reproductible exemple faisant clairement savoir exactement ce que vous faites.
un minimum de travail exemple est fourni. Je ne sais pas si c'est un espace de noms d'un problème de portée. C'est une question que je veux voir résolu...
Pas sûr que c'est le mieux à faire, mais il fonctionne lorsque vous ajoutez
assign("d", d, .GlobalEnv)
après d$binclass <- as.factor(d$binclass)
.Cela semble assez draconiennes de la mesure. Mais bon, ça fonctionne!
OriginalL'auteur user989762 | 2015-07-31
Vous devez vous connecter pour publier un commentaire.
Il ne semble pas être un bug dans le code quand il s'agit de l'évaluation de la commande dans un environnement adéquat. Le problème semble être dans le
C50::model.frame.C5.0
fonction. Le plus "propre" contourner que j'ai pu trouver, c'était d'ajouter unterms
bien à votre modèle. Cela aidera à encapsuler la fonction de l'environnement.OriginalL'auteur MrFlick
@MrFlick est presque ça mais pas tout à fait. Ce problème de traçage est particulièrement gênant lorsque vous essayez de transmettre des données arbitraires et de cibler les caractéristiques de la C50 méthode. Comme l'a souligné MrFlick il avait à faire avec le renommage termes. En renommant le x et le y de termes dans l'appel de la méthode de tracé de la fonction de ne pas se confondre.
Par exemple, voici une méthode pour passer à l'arbitraire de données et une entité cible et être toujours en mesure de tracer le résultat:
Le modèle objet retourné par la méthode ci-dessus peut être tracée à la normale.
OriginalL'auteur Cybernetic
Vous pouvez utiliser l'affectation spéciale de l'opérateur <<- au lieu de la norme (<-). Il vous permettra d'économiser de l'objet pour l'environnement mondial et qui peut résoudre votre problème.
OriginalL'auteur user10854911