在评估表达式时出现错误:未找到对象。

19
我不理解这里出了什么问题。
data.train <- read.table("Assign2.WineComplete.csv",sep=",",header=T)
# Building decision tree
Train <- data.frame(residual.sugar=data.train$residual.sugar,
                total.sulfur.dioxide=data.train$total.sulfur.dioxide, 
                alcohol=data.train$alcohol,
                quality=data.train$quality)
Pre <- as.formula("pre ~ quality")

fit <- rpart(Pre, method="class",data=Train)

我遇到了以下错误:
Error in eval(expr, envir, enclos) : object 'pre' not found

2
你不需要代码中的第二行或第三行。只需执行read.table行,然后执行:fit <- rpart(pre ~ quality, method="class",data=data.train) - Thomas
我尝试了你让我做的事情,但我仍然得到相同的错误。 - Rads
这里是否存在大小写问题?我看到 'Pre' 被声明了,但错误是关于 'pre' 的。 - ako
不,如果我只写下数据读取语句 data.train <- read.table("Assign2.WineComplete.csv",sep=",",header=T) 和拟合语句 fit <- rpart(pre ~ quality, method="class",data=data.train),我会得到相同的错误。 - Rads
4个回答

23

不知道为什么@Janos删除了他的答案,但是它是正确的:您的数据框Train没有名为pre的列。当您将公式和数据框传递给模型拟合函数时,公式中的名称必须引用数据框中的列。您的Train有被称为residual.sugartotal.sulfuralcoholquality 的列。您需要更改公式或数据框以使它们相互一致。

只想澄清一点:Pre是一个包含公式的对象。该公式包含对变量pre的引用。后者必须与数据框一致。


1
嗯..我在试图编辑我的评论时错误地删除了他的帖子..抱歉@Janos.. 我明白你的意思..但是在使用rpart构建决策树时,请告诉我公式应该如何,决策树必须仅基于“quality”列。我尝试使用R中的示例:: fit <- rpart(Kyphosis ~ Age + Number+ Start,data = kyphosis)。 - Rads
要使用 rpart,您需要一个因变量:即使用自变量进行预测或估计的内容。在您的数据框中,哪个是因变量? - Hong Ooi

13

如果您没有附加您的数据集,可能会发生这种情况。


2

我想我找到了我要找的东西。

data.train <- read.table("Assign2.WineComplete.csv",sep=",",header=T)
fit <- rpart(quality ~ ., method="class",data=data.train)
plot(fit)
text(fit, use.n=TRUE)
summary(fit)

0

我使用了colname(train) = paste("A", colname(train)),结果出现了和你一样的问题。

最终我发现,randomForest比rpart更为严格,它无法识别带有空格、逗号或其他特定标点符号的列名。

paste函数会在每个列名前加上"A"和" "作为分隔符。因此,我们需要避免空格,并改用以下语句:

colname(train) = paste("A", colname(train), sep = "")

这将在没有空格的情况下添加字符串。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接