首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >R的插入包中的rfe给出错误为:任务1失败-“参数1不是向量”

R的插入包中的rfe给出错误为:任务1失败-“参数1不是向量”
EN

Stack Overflow用户
提问于 2015-06-05 09:38:09
回答 2查看 2.4K关注 0票数 5

我有一个training_predictors集,其中包含56列,所有这些列都是numerictraining_labels01factor载体。

我使用下面的列表作为要测试的子集大小。

代码语言:javascript
运行
复制
subset_sizes <- c(1:5, 10, 15, 20, 25)

下面是修改后的rfFuncs函数的列表。

代码语言:javascript
运行
复制
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)

我已宣布管制职能如下:

代码语言:javascript
运行
复制
rfeCtrl <- rfeControl(functions = rfRFE, 
                      method = "cv", 
                      number = 10, 
                      verbose = TRUE)

但是当我运行rfe函数时,如下所示,

代码语言:javascript
运行
复制
rfProfile <- rfe(training_predictors, 
                 training_labels, 
                 sizes = subset_sizes, 
                 rfeControl = rfeCtrl)

我收到了一个错误,因为:

代码语言:javascript
运行
复制
Error in { : task 1 failed - "argument 1 is not a vector"

我也尝试过改变矢量subset_sizes,但仍然没有成功。我做错了什么?

更新:我试着一个一个地运行这些步骤,问题似乎在于rank函数。但我还是想不出这个问题。

更新:我发现了问题。秩函数中的varImp不包含$Overall。但是它包含名为01的列。为什么会这样呢?01意味着什么(顺便说一句,这两个列值完全相同)?此外,如何使varImp返回$Overall列?作为一种临时解决方案,我正在创建一个新的列$Overall,并将它附加到rank函数中的vimp

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-06-09 23:18:01

使用01作为因子级别是有问题的,因为它们不是有效的R列名。在另一篇文章中,您可能会收到一条关于将这些信息用作输出的因素级别的消息。

尝试使用具有更多信息级别的因素结果,这些级别可以转换为有效的R列名(用于类概率)。

票数 4
EN

Stack Overflow用户

发布于 2017-03-08 19:43:22

我已经为这个问题找到了一个解决方案,用插入符号拟合rfe中的logistic回归模型。解决办法如下:

代码语言:javascript
运行
复制
glmFuncs$rank <-function (object, x, y){

  vimp <- varImp(object, scale = FALSE)
  loadNamespace("dplyr")

  vimp <- vimp$importance %>% 
    mutate(var=row.names(.)) %>%
    arrange(-Overall)

   vimp <- vimp[order(vimp$Overall, decreasing = TRUE), ,drop = FALSE]
   vimp
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30663205

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档