2015-10-19 16 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

相关问题