R的插入符号包中的rfe给出错误:任务1失败 – “参数1不是矢量”

我有一个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列名称(针对类概率).

点赞