首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在R中:is.data.frame错误(Data):找不到对象'‘,C5.0绘图

在R中:is.data.frame错误(Data):找不到对象'‘,C5.0绘图
EN

Stack Overflow用户
提问于 2015-07-31 12:21:58
回答 3查看 44.9K关注 0票数 6

这个问题与Stackoverflow上的其他一些问题(hereherehere)相似,但有很大的不同,以至于我无法根据我的情况推断这些答案。

我有一个函数,我拟合一个C5.0模型,然后尝试绘制该模型。

代码语言:javascript
复制
train_d <- globald[train_ind,c(features,21)]
model <- C5.0(binclass ~ .,data=train_d,trials=10)

globald是我的训练/测试数据中的一个列名( binclass是一个数据帧,我从该数据帧中将具有_ind索引的行和列c(3:12,21)子集,其中列21被命名为binclass)。拟合效果很好。但是,当我同时添加这行代码时

代码语言:javascript
复制
plot(model,trial=0)

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

怎么可能在拟合模型时,train_d被找到并正确使用,但在绘图时,却找不到train_d呢?以及如何解决这个问题的任何建议。R中的名称空间对我来说仍然是个谜。

下面是一个最小的运行示例:

代码语言:javascript
复制
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)   
}

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

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

EN

回答 3

Stack Overflow用户

发布于 2015-08-01 05:54:16

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

代码语言:javascript
复制
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)   
}
票数 4
EN

Stack Overflow用户

发布于 2016-05-13 05:01:41

@MrFlick先生差一点就成功了,但还不够。在尝试将任意数据和目标要素传递给C50方法时,绘图的这个问题尤其令人讨厌。正如MrFlick所指出的,这与重命名术语有关。通过重命名方法调用中的x和y项,绘图函数不会被混淆。

代码语言:javascript
复制
tree_model$call$x <- data_train[, -target_index]
tree_model$call$y <- data_train[[target_feature]] 

例如,下面是一个方法,用于传递任意数据和目标特征,同时仍然能够绘制结果:

代码语言:javascript
复制
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)

}

上述方法返回的模型对象可以正常绘制。

代码语言:javascript
复制
model <- boosted_trees(data_train, 'my_target', 10)
plot(model)
票数 2
EN

Stack Overflow用户

发布于 2019-01-02 01:07:10

您可以使用特殊赋值运算符<<-而不是标准赋值运算符(<-)。它会将对象保存到全局环境中,这样就可以解决您的问题。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31738045

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档