我有一个training_predictors设置有56列,所有列都是数字. training_labels是0和1的因子向量.
我使用以下列表作为要测试的子集大小.
subset_sizes <- c(1:5, 10, 15, 20, 25)
以下是修改后的rfFuncs函数列表.
rfRFE <- list(summary = defaultSummary,
fit = function(x, y, first, last, ...) {
library(randomForest)
randomForest(x, y, importance = first, ...)
},
pred = function(object, x) predict(object, x),
rank = function(object, x, y) {
vimp <- varImp(object)
vimp <- vimp[order(vimp$Overall, decreasing = TRUE),,drop = FALSE]
vimp$var <- rownames(vimp)
vimp
},
selectSize = pickSizeBest,
selectVar = pickVars)
我已将控制功能声明为:
rfeCtrl <- rfeControl(functions = rfRFE,
method = "cv",
number = 10,
verbose = TRUE)
但是当我运行如下所示的rfe函数时,
rfProfile <- rfe(training_predictors,
training_labels,
sizes = subset_sizes,
rfeControl = rfeCtrl)
我收到一个错误:
Error in { : task 1 failed - "argument 1 is not a vector"
我也试过改变矢量subset_sizes,但仍然没有运气.我究竟做错了什么?
更新:我试图逐个运行这些步骤,问题似乎与rank函数有关.但我仍然无法弄清楚问题.
更新:我发现了问题.排名函数中的varImp不包含$Overall.但它包含名称为0和1的列.为什么会这样? 0和1表示什么(顺便说一下,两个列值完全相同)?另外,如何让varImp返回$Overall列? [作为临时解决方案,我正在创建一个新列$Overall并将其附加到排名函数中的vimp.]
最佳答案 使用0和1作为因子级别是有问题的,因为它们不是有效的R列名称.在您的其他SO帖子中,您可能会收到一条消息,将这些作为输出的因子级别使用.
尝试使用具有更多信息级别的因子结果,这些级别可以转换为有效的R列名称(针对类概率).