如何处理randomForest包中以数字开头的变量名

如何处理randomForest包中以数字开头的变量名,r,random-forest,R,Random Forest,在下面的玩具示例中,我将变量名cyl转换为1_-cyl。我这样做是因为在我的实际数据中有一些变量以数字开头。我使用该公式应用randomForest,但我得到如下所示的错误。我看到另一个函数用同样的公式工作得很完美 我怎样才能解决这个问题 data(mtcars) colnames(mtcars)[2] = '1_cyl' colnames(mtcars) #[1] "mpg" "1_cyl" "disp" "hp" "drat" "wt" "qsec" "vs" "

在下面的玩具示例中,我将变量名
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)
数据(mtcars)
colnames(mtcars)[2]=“1_cyl”
colnames(mtcars)
#[1] “mpg”“1气缸”“显示”“hp”“drat”“wt”“qsec”“vs”“am”“齿轮”“carb”]
(fmla随机森林(fmla,dat=mtcars,重要性=T,na.action=na.exclude)
#eval(expr、envir、enclose)中出错:找不到对象“1_cyl”
#另一个功能工作!!!
rpart(fmla,dat=mtcars)
glm(fmla,dat=mtcars)

randomForest.formula
内部调用了
重新格式化
,出于某种原因,该函数似乎不喜欢非标准名称。(它还调用了
model.frame
两次。)

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

randomForest(mtcars[, -1], mtcars[, 1])

我看不出有什么令人信服的理由来解释为什么变量名必须以数字开头。文件读取函数在清理名称方面做得很好,而不这样做只是自找麻烦。您的选择是(1)不要使用randomForest的公式接口,或者(2)不要这样命名变量。因为变量名违反了R的名称语法,所以没有理由指望任何函数会遵守它们(即使有些函数会遵守)。