Im just playing with a Random Forest, but I seem to have an issue. When I try use the randomForest()
function, it returns the error : Error in eval(predvars, data, env) : object '180018R' not found
. Here are the latest (relevant) lines of code, followed by the structure()
output.
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)
Structure info *I have shortened the output as it is unnecessary.
> 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]
So as you can see the error: Error in eval(predvars, data, env) : object '180018R' not found
mentioned 180018R which is the name of the first column.
Anyone knows what to do?
As best as I can tell, the issue is with the columns' names starting with numbers, which is not the best practice in R (although allowed), and I guess randomForest is not correctly handling it with the ~ .
syntax.
Try to rename all of the columns so that they start with some generic letter like V
and then see if your function now works. Here is a reproducible example that demonstrates this.
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