2015-10-19 79 views
2

讓我們說我們有以下代碼(對於這個問題的訓練/測試分區是無關緊要的)。使用變量來定義預測函數中的訓練列R

library(caret) 
data(iris) 
train(Species ~ .,data=iris, method="rf") 

現在,這運行良好。我想要做的是提供我試圖用變量預測的列(因爲我將從GUI中獲取它)。讓我們用下面的示例代碼:

library(caret) 
data(iris) 
colName <- 'Species' 
train(colName ~ .,data=iris, method="rf") 

這不起作用,因爲colName是不是在數據集中的一列。那麼有沒有辦法做到這一點?我搜索了高低,並沒有任何結果。有人請幫我:(

回答

1

這是一個很簡單的情況下,以下列方式使用所以應該paste罰款:

library(caret) 
data(iris) 
colName <- 'Species' 

#create the formula using as.formula and paste 
formula <- as.formula(paste(colName, ' ~ .')) 

#run model 
train(formula, data=iris, method="rf") 

輸出:

> train(formula,data=iris, method="rf") 
Random Forest 

150 samples 
    4 predictor 
    3 classes: 'setosa', 'versicolor', 'virginica' 

No pre-processing 
Resampling: Bootstrapped (25 reps) 

Summary of sample sizes: 150, 150, 150, 150, 150, 150, ... 

Resampling results across tuning parameters: 

    mtry Accuracy Kappa  Accuracy SD Kappa SD 
    2  0.9481249 0.9216819 0.02790700 0.04200793 
    3  0.9473557 0.9205465 0.02893104 0.04347956 
    4  0.9466284 0.9194525 0.02920803 0.04388548 

Accuracy was used to select the optimal model using the largest value. 
The final value used for the model was mtry = 2. 
+0

感謝我所看到的函數定義,在'train'函數中有'x','y'值,所以也可以使用train(iris [,colnames(iris)!= colName],iris [ colName],method =「rf」)'。笨我! – ssm

+0

Np很高興我可以幫忙:)。耶'caret :: train'的確是非常靈活! (對自己不要太苛刻,我們都去過:P) – LyzandeR

+1

保持明確的意思,當你在公式和非公式接口之間時,你可能會得到(稍微)不同的樹(和其他幾個)模型由於他們如何對待分類預測因子。 – topepo

相關問題