&引用;删除时出错(y%*%rep(1,nc))“;glmnet R包中cv.glmnet的错误

&引用;删除时出错(y%*%rep(1,nc))“;glmnet R包中cv.glmnet的错误,r,glmnet,R,Glmnet,我有一个函数,用于返回cv.glmnet模型的auc值,在执行cv.glmnet函数时,该函数通常会返回以下错误,尽管不是大多数情况: 放置时出错(y%%代表(1,nc)): 为函数“drop”选择方法时计算参数“x”时出错:y%%rep(1,nc)中出错:参数不一致 我已经读了一些关于错误的内容,我能找到的唯一建议是使用data.matrix()而不是as.matrix()。我的函数如下(其中“form”是一个带有所需变量的公式,“dt”是数据框): 信不信由你,我今天真的犯了同样的错误。因为

我有一个函数,用于返回cv.glmnet模型的auc值,在执行cv.glmnet函数时,该函数通常会返回以下错误,尽管不是大多数情况:

放置时出错(y%%代表(1,nc)): 为函数“drop”选择方法时计算参数“x”时出错:y%%rep(1,nc)中出错:参数不一致

我已经读了一些关于错误的内容,我能找到的唯一建议是使用data.matrix()而不是as.matrix()。我的函数如下(其中“form”是一个带有所需变量的公式,“dt”是数据框):


信不信由你,我今天真的犯了同样的错误。因为我不知道你的数据集,我不能确定它是什么,但对我来说,我作为y变量(你的depM)传递的数据是一列所有真值。cv.glmnet仅在y变量包含True和False值时返回有效模型


我希望我能解释为什么cv.glmnet需要True和False,但我对函数本身缺乏理解(事实上,我只是在修改提供给我的代码)。我只是想我会发布这个,以防它会给你一些帮助。祝你好运

在一个有2个阳性病例和850个阴性病例的数据集上运行
cv.glmnet
时,我遇到了同样的问题。在一个交叉验证迭代中(训练集和测试集随机抽样),两个阳性案例都从训练集中抽样。因此,
glmnet
调用
lognet
,它依次调用
drop(y%*%rep(1,nc))
,但
y
是一个向量,而不是至少有两列的矩阵

我能想到的最简单的方法是将
foldid
参数指定为
cv.glmnet
,并确保在每次迭代中数据中至少存在两个类

auc_cvnet <- function(form, dt, standard = F){
      vars = all.vars(form)
      depM = dt[[vars[1]]]
      indM = data.matrix(dt[vars[-1]])
      model = cv.glmnet(indM, depM, family = "binomial", nfolds=3, type.measure="auc", standardize = standard)

      pred = predict(model, indM, type = "response")
      tmp = prediction(pred, depM)
      auc.tmp = performance(tmp, "auc")
      return(as.numeric(auc.tmp@y.values))
    }