0

在下面的玩具示例中,我将变量名转换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)
4

1 回答 1

2

randomForest.formula出于某种原因,它内部有一个对 的调用reformulate,并且看起来该函数不喜欢非标准名称。(它也调用model.frame了两次。)

您可以通过randomForest不使用公式但使用模型矩阵和响应变量调用来解决此问题。当您使用公式时,无论如何都会发生这种情况;randomForest.formula只是为您构建模型矩阵的便捷包装器。

randomForest(mtcars[, -1], mtcars[, 1])
于 2013-07-25T14:21:54.330 回答