在R中:is.data.frame(数据)出错:找不到对象',C5.0图

use*_*762 5 plot r decision-tree

这个问题类似于Stackoverflow上的一些其他问题(这里,这里这里),但是不同,所以我不能将这些答案推断到我的案例中.

我有一个功能,我适合C5.0模型,而不是尝试绘制模型.

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

binclass是我的训练/测试数据中的列名称(globald是一个数据框,我从中对具有_ind索引和列的行进行子集c(3:12,21),其中第21列被命名binclass).配件效果很好.但是,当我也添加该行

plot(model,trial=0)
Run Code Online (Sandbox Code Playgroud)

然后我收到以下错误:Error in is.data.frame(data) : object 'train_d' not found.

如何在适合模型时train_d找到并正确使用,但在绘图时,train_d无处可寻?并且,有关如何解决此问题的任何建议.[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)
    plot(model)   
}
Run Code Online (Sandbox Code Playgroud)

调用会f()导致以下错误:Error in is.data.frame(data) : object 'd' not found

编辑:根据MrFlick的回答,似乎这个问题的原因是C5.0代码中的一个错误.Pascal和MrFlick指出了一些解决方法.

MrF*_*ick 5

在适当的环境中评估命令时,代码中似乎确实存在错误。问题似乎出在C50::model.frame.C5.0函数中。terms我能找到的“最干净”的解决方法是向模型添加属性。这将有助于封装函数环境。

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)   
}
Run Code Online (Sandbox Code Playgroud)