eval(expr,envir,enclos)中的错误:找不到对象

问题描述 投票:14回答:4

我无法理解这里出了什么问题。

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
r dataframe rpart
4个回答
17
投票

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

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


11
投票

只是为了补充;如果您没有附加数据集,就会发生这种情况。只是浪费了半个小时来解决这个问题。

干杯


1
投票

我想我得到了我想要的东西..

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更吝啬,它无法识别带有空格,逗号或其他特定标点符号的colname。

粘贴功能将“A”和“”作为每个colname的分隔符。所以我们需要避免空间并使用这句话:

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

这将在没有空格的情况下添加前缀。

© www.soinside.com 2019 - 2024. All rights reserved.