r语言 - eval(predvars, data, env) 中的错误:在 RandomForest 函数中找不到对象'Example'



我只是在玩随机森林,但我似乎有问题。当我尝试使用randomForest()函数时,它会返回错误:Error in eval(predvars, data, env) : object '180018R' not found。以下是最新的(相关的(代码行,后面是structure()输出。

install.packages("randomForest")
# Random forest
data <- as.data.frame(pattern_mat)
str(data)
# Response variable is "Response" Column 313
data$Response <- as.factor(data$Response)
table(data$Response)
### Data Partition
set.seed(123)
ind <- sample(2, nrow(data), replace=TRUE, prob=(c(0.7, 0.3)))
train <- data[ind==1,]
test <- data[ind==2,]
### Random Forest
library(randomForest)
set.seed(222)
rf <- randomForest(Response~., data = train)

结构信息*我缩短了输出,因为这是不必要的。

> str(train)
'data.frame':   145 obs. of  313 variables:
$ 180018R : num  1 0 0 0 0 0 0 0 0 0 ...
$ 217220R : num  1 0 0 0 0 0 0 0 0 0 ...
$ 217300R : num  1 0 0 0 0 0 0 0 0 0 ...
$ 281722R : num  0 1 1 1 1 1 1 1 1 0 ...
$ 681714R : num  0 1 1 1 1 1 1 1 1 0 ...
$ 281730R : num  0 1 1 1 1 1 1 1 1 0 ...
$ 681715R : num  0 1 1 1 1 1 1 1 1 0 ...
$ 411113  : num  0 0 0 0 0 0 0 0 0 1 ...
$ 478105  : num  0 0 0 0 0 0 0 0 0 1 ...
:        :   : : : : : : : : : :
:        :   : : : : : : : : : :
:        :   : : : : : : : : : :
$ 641112  : num  0 0 0 0 0 0 0 0 0 0 ...
$ 641170  : num  0 0 0 0 0 0 0 0 0 0 ...
$ 641370  : num  0 0 0 0 0 0 0 0 0 0 ...
$ 641611  : num  0 0 0 0 0 0 0 0 0 0 ...
$ 645342  : num  0 0 0 0 0 0 0 0 0 0 ...
[list output truncated]

因此,您可以看到错误:Error in eval(predvars, data, env) : object '180018R' not found提到180018R,这是第一列的名称。

有人知道该怎么办吗?

据我所知,问题在于列名以数字开头,这不是R中的最佳做法(尽管允许(,我猜randomForest没有正确地使用~ .语法处理它。

尝试重命名所有列,使它们以V之类的通用字母开头,然后看看您的函数现在是否有效。这里有一个可复制的例子来证明这一点。

set.seed(1)
data <- data.frame(x = rbinom(100, 1, 0.5))
data$`180018R` <- data$x
data$x <- NULL
data$Response <- as.factor(rbinom(100, 1, 0.2))
table(data$Response)
### Demonstrating error
library(randomForest)
set.seed(222)
rf <- randomForest(Response~., data = data)
# Produces error as in the original example
# Fixing the issue by adding a character to the column names except response
data2 <- data
response_col <- which(colnames(data2) == "Response")
colnames(data2)[-response_col] <- paste0( "V", colnames(data2)[-response_col])
set.seed(222)
rf <- randomForest(Response ~ ., data = data2)
# Runs with no issue

最新更新