2013-07-25 13 views
0

В приведенном ниже примере игрушка я преобразовал имя переменной cyl в 1_cyl. Я делаю это, так как в моих фактических данных есть некоторые переменные, начинающиеся с числа. Я применяю randomForest, используя эту формулу, но я получаю ошибку, показанную ниже. Я вижу, что другие функции работают с той же формулой.Как обрабатывать имена переменных, начинающиеся с числа в пакете randomForest

Как я могу решить эту проблему?

data(mtcars) 
colnames(mtcars)[2] = '1_cyl' 
colnames(mtcars) 
#[1] "mpg" "1_cyl" "disp" "hp" "drat" "wt" "qsec" "vs" "am" "gear" "carb" ] 
(fmla <- as.formula(paste("mpg ~ `1_cyl`+hp "))) 
randomForest(fmla, dat=mtcars,importance=T,na.action=na.exclude) 

#> randomForest(fmla, dat=mtcars,importance=T,na.action=na.exclude) 
#Error in eval(expr, envir, enclos) : object '1_cyl' not found 

#Another functions works!!! 
rpart(fmla, dat=mtcars) 
glm (fmla, dat=mtcars) 
+1

Я не вижу убедительной причины, по которой имя переменной должно начинаться с числа. Функции чтения файлов выполняют хорошую работу по дезинфекции имен и не делают этого, просто спрашивают о проблемах. – Roland

+2

Ваши варианты (1) не используют интерфейс формулы для randomForest, или (2) не называйте ваши переменные такими. Поскольку ваши имена переменных нарушают синтаксис R для имен, нет никаких оснований ожидать, что какая-либо функция будет их соблюдать (даже если некоторые другие будут). – joran

ответ

2

randomForest.formula имеет вызов внутри него к reformulate, по какой-то причине, и, похоже, что функция не любит нестандартные имена. (Он также звонит model.frame дважды.)

Вы можете обойти это, позвонив randomForest без формулы, но с матрицей модели и переменной ответа. Когда вы используете формулу, это то, что происходит в любом случае; randomForest.formula - это просто удобная обертка, которая строит модельную матрицу для вас.

randomForest(mtcars[, -1], mtcars[, 1]) 
Смежные вопросы