在下面的玩具示例中,我将变量名称cyl
转换为1_cyl。我这样做是因为在我的实际数据中有一些以数字开头的变量。我正在使用该公式应用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)
答案 0 :(得分:2)
randomForest.formula
在reformulate
内有一个调用,看起来该函数不喜欢非标准名称。 (它也会两次调用model.frame
。)
你可以通过在没有公式的情况下调用randomForest
但使用模型矩阵和响应变量来解决这个问题。当你使用公式时,无论如何都会发生这种情况; randomForest.formula
只是一个便利包装器,可以为您构建模型矩阵。
randomForest(mtcars[, -1], mtcars[, 1])