R glmnet:“在;(列表)对象不能强制为类型';双倍'&引用;

R glmnet:“在;(列表)对象不能强制为类型';双倍'&引用;,r,glmnet,R,Glmnet,我试图在数据集上使用glmnet包。我正在使用cv.glmnet()获取glmnet()的lambda值。以下是数据集和错误消息: > head(t2) X1 X2 X3 X4 X5 X6 X7 X8 X9 X10 X11 X12 1 1 1 0.7661266 45 2 0.80298213 9120 13 0 6 0 2 2 2 0 0.9571510 40 0 0.12187620 2600 4 0 0

我试图在数据集上使用
glmnet
包。我正在使用
cv.glmnet()
获取
glmnet()
的lambda值。以下是数据集和错误消息:

> head(t2)
  X1 X2        X3 X4 X5         X6    X7 X8 X9 X10 X11 X12
1  1  1 0.7661266 45  2 0.80298213  9120 13  0   6   0   2
2  2  0 0.9571510 40  0 0.12187620  2600  4  0   0   0   1
3  3  0 0.6581801 38  1 0.08511338  3042  2  1   0   0   0
4  4  0 0.2338098 30  0 0.03604968  3300  5  0   0   0   0
5  5  0 0.9072394 49  1 0.02492570 63588  7  0   1   0   0
6  6  0 0.2131787 74  0 0.37560697  3500  3  0   1   0   1
> str(t2)
'data.frame':   150000 obs. of  12 variables:
 $ X1 : int  1 2 3 4 5 6 7 8 9 10 ...
 $ X2 : int  1 0 0 0 0 0 0 0 0 0 ...
 $ X3 : num  0.766 0.957 0.658 0.234 0.907 ...
 $ X4 : int  45 40 38 30 49 74 57 39 27 57 ...
 $ X5 : int  2 0 1 0 1 0 0 0 0 0 ...
 $ X6 : num  0.803 0.1219 0.0851 0.036 0.0249 ...
 $ X7 : int  9120 2600 3042 3300 63588 3500 NA 3500 NA 23684 ...
 $ X8 : int  13 4 2 5 7 3 8 8 2 9 ...
 $ X9 : int  0 0 1 0 0 0 0 0 0 0 ...
 $ X10: int  6 0 0 0 1 1 3 0 0 4 ...
 $ X11: int  0 0 0 0 0 0 0 0 0 0 ...
 $ X12: int  2 1 0 0 0 1 0 0 NA 2 ...
> cv1 <- cv.glmnet(t2[,-c(1,2,7,12)], t2[,2], family="multinomial")
Error in lognet(x, is.sparse, ix, jx, y, weights, offset, alpha, nobs,  : 
  (list) object cannot be coerced to type 'double'
>头部(t2)
x1x2x3 X4 X5 X6 X7 X8 X9 X10 X11 X12
1  1  1 0.7661266 45  2 0.80298213  9120 13  0   6   0   2
2  2  0 0.9571510 40  0 0.12187620  2600  4  0   0   0   1
3  3  0 0.6581801 38  1 0.08511338  3042  2  1   0   0   0
4  4  0 0.2338098 30  0 0.03604968  3300  5  0   0   0   0
5  5  0 0.9072394 49  1 0.02492570 63588  7  0   1   0   0
6  6  0 0.2131787 74  0 0.37560697  3500  3  0   1   0   1
>str(t2)
“数据帧”:150000 obs。在12个变量中:
$X1:int 1 2 3 4 5 6 7 8 9 10。。。
$X2:int 1 0 0 0 0 0。。。
$X3:num 0.766 0.957 0.658 0.234 0.907。。。
$X4:int 45 40 38 30 49 74 57 39 27 57。。。
$X5:int 2 0 1 0 1 0 0 0 0 0 0 0 0。。。
$X6:num 0.803 0.1219 0.0851 0.036 0.0249。。。
$X7:int 9120 2600 3042 3300 63588 3500 NA 3500 NA 23684。。。
$X8:int 13 4 2 5 7 3 8 2 9。。。
$X9:int 0 1 0 0 0 0 0 0 0。。。
$X10:int 600 01 130 04。。。
$X11:int 0 0 0 0 0。。。
$X12:int 2 1 0 0 0 1 0 NA 2。。。

>cv1
cv.glmnet
期望的是预测矩阵,而不是数据帧。一般情况下,您可以通过

X <- model.matrix(<formula>, data=<data>)

NA是自动处理的,因此您不必排除缺少值的列。

Quick note,而不是as.matrix(),我最终不得不使用:data.matrix()。@screechOwl:我看不出您需要使用
data.matrix()
;你所有的变量都是int或num。你能重新检查一下原因吗?
X <- as.matrix(t2[,-c(1,2,7,12)])
cv.glmnet(X2 ~ ., data=t2[-1], family="multinomial")