如何在列车功能插入符R中传递字符向量

时间:2015-11-05 16:31:50

标签: r random-forest r-caret

我想在训练模型时减少变量的数量。我总共有784个要减少的功能,比方说500.我可以用选择的功能制作一个长字符串,使用粘贴命令折叠+,以得到一个长字符串。 例如,假设这是我的载体

val <- "pixel40+pixel46+pixel48+pixel65+pixel66+pixel67"

然后我想把它传递给火车这样的功能

Rf_model <- train(label~val, data =training, method="rf", ntree=200, na.action=na.omit)

但我收到了错误

model.frame.default(form = label ~ val, data = training, na.action = na.omit)

谢谢! 路易斯

1 个答案:

答案 0 :(得分:3)

你可以这样做:

val <- "pixel40+pixel46+pixel48+pixel65+pixel66+pixel67"

#use paste to paste the label to val
#and then use as.formula to convert to formula
form <- as.formula(paste('label ~', val))
#> form
#label ~ pixel40 + pixel46 + pixel48 + pixel65 + pixel66 + pixel67 

Rf_model <- train(form, data =training, method="rf", ntree=200, na.action=na.omit)

此外,在这种情况下,使用字符串创建公式应该没问题,因为这很简单,但对于更复杂的公式,它可能会出错。在这种情况下,您可以浏览stats::updateFormula包。

或者您也可以使用update(虽然我更喜欢上一种方式):

#> update(label ~ 1,  paste('~', val) )
#label ~ pixel40 + pixel46 + pixel48 + pixel65 + pixel66 + pixel67