2013-07-25 74 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]) 
相關問題