2015-07-31 22 views
5

Bu soru Stackoverflow (here, here ve here) gibi diğer sorulara benzer, ancak bu kadar farklı Bu cevapları benim durumumda tahmin edemem.R: is.data.frame içinde hata (veri): object '' bulunamadı, C5.0 arsa

Ben C5.0 modeline uyum daha modeli çizmek için çalıştıkları bir işlevi vardır.

train_d <- globald[train_ind,c(features,21)] 
model <- C5.0(binclass ~ .,data=train_d,trials=10) 

binclass

(globald ı sütun 21 binclass adlı _ind endeksleri ve sütunlar c(3:12,21), satırları alt küme olan bir dataframe) benim eğitim/test verilerinde bir sütun adıdır. Uydurma iyi çalışıyor. Ben de o zaman çizgisini

plot(model,trial=0) 

eklerken Ancak, aşağıdaki hatayı alıyorum: Error in is.data.frame(data) : object 'train_d' not found.

Modele uyurken, train_d doğru şekilde bulunduğunda ve kullanıldığında, nasıl çizilir, train_d hiçbir yerde bulunamaz? Ve, bu sorunun nasıl çözüleceğine dair herhangi bir öneri. [R] içindeki ad alanları benim için bir gizem olmaya devam ediyor.

bir asgari çalışan örnek

şudur: Error in is.data.frame(data) : object 'd' not found

Düzenleme::

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) 
} 

şu hatayla f() sonuçları çağrılması MrFlick gelen cevap gereğince, öyle görünüyor ki bu sorunun nedeni C5.0 kodundaki bir hatadır. Bazı geçici çözümler Pascal ve MrFlick tarafından belirtilmiştir.

+3

"Diğer sorular"? Ve tekrarlanabilir bir örnek olmadan, bir cevap almak için karmaşık olacak. –

+1

Bu, olası bir kapsam sorunu kadar bir ad alanı sorunu gibi gelmiyor. Ancak, sağladığınız bilgilerden net değil. Tam olarak ne yaptığınızı açıkça belirten bir [tekrarlanabilir örnek] (http://stackoverflow.com/questions/5963269/how-to-make-a-great-rprorecible-example) eklemelisiniz. – MrFlick

+0

@Pascal: minimal bir çalışma örneği sağlanmıştır. Bir kapsam sorununun ad alanı olup olmadığını bilmiyorum. Çözülmüş görmek istediğim bir konu ... – user989762

cevap

3

bu uygun ortamda komutu değerlendirirken gelince kodunda bir hata var gibi görünüyor. Sorun, C50::model.frame.C5.0 işlevinde görünüyor. Ben bulabildiğim "en temiz" çalışma, modelinize bir terms özellik eklemek oldu. Bu işlev ortamını kapsüllemeye yardımcı olacaktır.

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) 
    model$terms <- eval(model$call$formula) #<---- Added line 
    plot(model) 
} 
+0

Tamam. Yani C5.0'da bir hata gibi görünüyor? Çözümler işe yarıyor ve en azından sorunu hafifletiyor. – user989762

0

@MrFlick neredeyse vardı ama oldukça değil. Çizelgelemede bu sorun, isteğe bağlı verileri ve hedef özellikleri C50 yöntemine iletmeye çalışırken özellikle can sıkıcıdır. MrFlick tarafından işaret edildiği gibi, terimleri yeniden adlandırmakla ilgiliydi. Yöntemdeki x ve y terimlerini yeniden adlandırmak, çizim işlevini karıştırmaz.

boosted_trees <- function(data_train, target_feature, iter_choice) { 

    target_index <- grep(target_feature, colnames(data_train)) 
    model_boosted <- C5.0(x = data_train[, -target_index], y = data_train[[target_feature]], trial=iter_choice) 
    model_boosted$call$x <- data_train[, -target_index] 
    model_boosted$call$y <- data_train[[target_feature]] 
    return(model_boosted) 

} 

yukarıdaki yöntemle geri modeli objesi çizilebilir: Örneğin

tree_model$call$x <- data_train[, -target_index] 
tree_model$call$y <- data_train[[target_feature]] 

, burada ve sonuçları çizmek mümkün hala keyfi veri ve bir hedef özelliği geçen ve için bir yöntemdir normal olarak.

model <- boosted_trees(data_train, 'my_target', 10) 
plot(model)