glmnet中的R错误:外部函数调用中的NA / NaN / Inf

时间:2014-02-18 15:27:02

标签: r sparse-matrix na glmnet

我正在尝试使用glmnet创建一个模型(目前使用cv来查找lambda值),我收到错误NA/NaN/Inf in foreign function call (arg 5)。我相信这与我的数据集中的NA值有关,因为当我使用NA删除所有数据点时,命令会成功运行。

我的印象是glmnet 可以处理NA值。我不确定错误来自哪里:

> res <- cv.glmnet(features.mat, as.factor(tmp[,"outcome"]), family="binomial")
Error in lognet(x, is.sparse, ix, jx, y, weights, offset, alpha, nobs,  : 
  NA/NaN/Inf in foreign function call (arg 5)

数据集看起来像这样:

> head(features.mat)
6 x 8 sparse Matrix of class "dgCMatrix"
   a b   c  e  f  g  h i
1  1 1 138 NA NA 15 NA .
4  1 3 171 NA NA 17 NA .
7  1 1 156 NA NA  5 NA .
8  1 4  97 NA NA  7 NA .
9  1 1 219 NA NA 11 NA .
10 1 . 263 NA NA 20 NA .
> head(as.factor(tmp[,"outcome"]))
[1] 0 0 0 0 0 0
Levels: 0 1

4 个答案:

答案 0 :(得分:9)

看来glmnet无法处理NA值!

答案 1 :(得分:3)

添加: 如果您在数据帧中没有NA的情况下遇到此错误,则可能未使用model.matrix函数定义输入矩阵。

x <- model.matrix( ~ ., Data)

我知道这不是您问题的答案,但是我和您有同样的错误,并找到了解决方案。因此对其他人可能会有帮助。

答案 2 :(得分:0)

如上所述,cv.glmnet不支持转换为因数的chars数据类型,如上所述,不能处理NA。可以使用as.numeric或as.double。

答案 3 :(得分:0)

请注意,如果您包含日期功能,也会发生这种情况。我没有 NA,但出现此错误。当我删除日期变量时,一切都很好。