I'm trying to use the glmnet
package on a dataset. I'm using cv.glmnet()
to get a lambda value for glmnet()
. I'm excluding columns 1,2,7,12 as they are: id column, response column, contain NA's, and contain NA's.
Here's the dataset and error message:
> 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(as.matrix(t2[,-c(1,2,7,12)]), t2[,2], family="binomial")
Error in as.matrix(cbind2(1, newx) %*% nbeta) :
error in evaluating the argument 'x' in selecting a method for function 'as.matrix': Error in t(.Call(Csparse_dense_crossprod, y, t(x))) :
error in evaluating the argument 'x' in selecting a method for function 't': Error: invalid class 'NA' to dup_mMatrix_as_dgeMatrix
> cv1 <- cv.glmnet(as.matrix(t2[,-c(1,2,7,12)]), t2[,2], family="multinomial")
Error in t(.Call(Csparse_dense_crossprod, y, t(x))) :
error in evaluating the argument 'x' in selecting a method for function 't': Error: invalid class 'NA' to dup_mMatrix_as_dgeMatrix
Any suggestions?
For some reason glmnet prefers data.matrix()
to as.matrix()
cv1 <- cv.glmnet(data.matrix(t2[,-c(1,2,7,12)]), t2[,2], family="multinomial")
should do the job.
I got the same error Msg. and unfortunately it wasn't as easy as using data.matrix() for me.
The error occures in a crossproduct of the input matrix and the model coefficients.
In predict.glmnet:
nfit = as.matrix(cbind2(1, newx) %*% nbeta)
What solved the problem for me was forcing x to a dgCMatrix. I seriously don't understand why, but it works for me.
predict(object = lm, newx = as(x, "dgCMatrix"), type = "response")
Since I haven't seen this as an answer in one of the many questions regarding that error I thought I'd post it here.
I had a similar error message when using cv.glmnet. cv.glmnet would function correctly in RStudio, but it would fail to work when using Rscript. The fix for me was to add to the top of my script:
require(methods)
It seems that the "glmnet" package may be using some functions from the "methods" package, but this package is not loaded at startup when using Rscript. However, the "methods" package is normally loaded by default in R.
Here is information about this Rscript functionality:
Rscript does not load methods package, R does -- why, and what are the consequences?
I hope this helps someone that runs into the same issue that I did.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With