Ошибка в eval (predvars, data, env): объект 'Example' не найден в функции RandomForest - PullRequest
1 голос
/ 06 мая 2020

Я просто играю со случайным лесом, но, похоже, у меня проблема. Когда я пытаюсь использовать функцию 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 , которое является именем первого столбца.

Кто-нибудь знает, что делать?

1 Ответ

4 голосов
/ 06 мая 2020

Насколько я могу судить, проблема заключается в том, что имена столбцов начинаются с цифр, что не является лучшей практикой в ​​R (хотя и разрешено), и я предполагаю, что randomForest неправильно обрабатывает его с синтаксисом ~ . .

Попробуйте переименовать все столбцы так, чтобы они начинались с некоторой общей c буквы, например 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...