【问题标题】:Difference between rpart and tree in RR中rpart和tree的区别
【发布时间】:2015-07-21 08:36:16
【问题描述】:

我认为rparttree 完全相同,直到我遇到这个问题。

我有一个包含 329 列的数据框 wikiWords。其中 328 个在预测变量,它们都是 num。左边是Vandal - 响应是factorstr(wikiWords) 是:

'data.frame':   3876 obs. of  329 variables:
 $ A accord                      : num  0 0 0 0 0 0 0 0 0 0 ...
 $ A actual                      : num  0 0 0 0 0 0 0 0 0 0 ...
 $ A ago                         : num  0 0 0 0 0 0 0 0 0 0 ...
 $ A agre                        : num  0 0 0 0 0 0 0 0 0 0 ...
 $ A analog                      : num  0 0 0 0 0 0 0 0 0 0 ...
 $ A appar                       : num  0 0 0 0 0 0 0 0 0 0 ...
 $ A arbitrari                   : num  0 0 0 0 0 0 0 0 0 0 ...
 $ A believ                      : num  0 0 0 0 0 0 0 0 0 0 ...
 $ A biolog                      : num  0 0 0 0 0 0 0 0 0 0 ...
 $ A biologyanalog               : num  0 0 0 0 0 0 0 0 0 0 ...
 $ A bodi                        : num  1 0 0 0 1 0 0 0 0 0 ...
 $ A call                        : num  1 0 0 0 1 0 0 0 0 0 ...
 ......
 $ Vandal                        : Factor w/ 2 levels "0","1": 1 1 1 1 1 1 1 1 1 1 ...

这很好用:

wikitree = rpart(Vandal ~ .,data=wikiWords,method = 'class')

但这显示了一个错误:

wikitree = tree(Vandal ~ .,data=wikiWords,method = 'class')

错误是:“[.data.frame(frame, predictors) 中的错误:选择了未定义的列”

我真的不知道出了什么问题。非常感谢任何帮助。

【问题讨论】:

  • 你能提供str(wikiWords)吗?我用模拟数据尝试了代码,一切都很好,所以我想可能是非标准列名有问题?但如果不了解您的数据,那纯属猜测。
  • @thothal:已添加。

标签: r


【解决方案1】:

这是由于您的列名有问题,其中有空格。导致此错误

这工作正常:

set.seed(1000)
tmp <- data.frame(sample(0:1,100,replace=T, prob=c(0.5,.5)),V1=rnorm(100),V2=rnorm(100))
colnames(tmp) <- as.character(c('Target','aword','bword'))


library(rpart)
rpart(Target~.,data=tmp)

library(tree)
tree(Target~.,data=tmp)

这不起作用,因为列名中有空格

set.seed(1000)
tmp <- data.frame(sample(0:1,100,replace=T, prob=c(0.5, 0.5)),V1=rnorm(100),V2=rnorm(100))
colnames(tmp) <- as.character(c('Target','a word','b word'))

library(rpart)
rpart(Target~.,data=tmp)

library(tree)
tree(Target~.,data=tmp)

【讨论】:

  • 但在您的第二个示例中,rpart 仍然有效。你知道原因吗?
  • rpart 实现可以灵活地使用包含空格的功能名称。因为树没有这样的灵活性
猜你喜欢
  • 2021-07-25
  • 1970-01-01
  • 1970-01-01
  • 2011-09-05
  • 2020-01-29
  • 1970-01-01
  • 1970-01-01
  • 2023-03-05
  • 1970-01-01
相关资源
最近更新 更多