我正在尝试使用tree包运行简单的分类树。我已经从一本教科书中获取了代码,一个接一个地复制,但是不管我做什么,它都行不通。
library(ISLR)
library(tree)
C = Carseats
C$HighSales = ifelse(C$Sales<=8,"No","Yes")
C = C[,-1]
set.seed(2)
train = sample(1:nrow(C), 200)
carseats.test = C[-train,]
high.test = C$HighSales[-train]
tree.carseats = tree(HighSales~., C, subset = train)
tree.predict = predict(tree.carseats, carseats.test, type = "class")
table(tree.predict,high.test)
(93+48)/200
set.seed(3)
cv.cs = cv.tree(tree.carseats, FUN = prune.misclass)
I am getting the following error:
Error in as.data.frame.default(data, optional = TRUE) :
cannot coerce class ‘"function"’ to a data.frame
我已经看过该功能的帮助。它需要一个树对象,这就是我放入的对象。
可能是什么问题?该代码与教科书以及引用该书的其他网站相同。
答案 0 :(得分:1)
有两个问题。一个与tree
中的公式有关:
公式-公式表达式。左侧(响应)应该是将要拟合回归树时的数值向量,或者是生成分类树时的因子。右侧应该是一系列用+分隔的数字或因子变量;不应有互动条款。两者都有。和-允许:回归树可以包含偏移项。
因此,我们应该改为
C$HighSales <- factor(ifelse(C$Sales <= 8, "No", "Yes"))
接下来,cv.tree
处理变量存在问题(请参见here)。做类似的事情
mydf <- C
tree.carseats <- tree(HighSales ~ ., mydf, subset = train)
有效。问题在于,有一个名为C
的函数,而cv.tree
完全是指该函数,而不是您的数据集。