R glmnet as.сообщение об ошибке matrix()
Я пытаюсь использовать glmnet
пакета в наборе данных. Я использую cv.glmnet()
чтобы получить значение лямбда для glmnet()
. Я исключаю столбцы 1,2,7,12, как они есть: столбец id, столбец ответа, содержат NA и содержат NA.
вот набор данных и сообщение об ошибке:
> 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
какие предложения?
3 ответов
по какой-то причине glmnet предпочитает data.matrix()
to as.matrix()
cv1 <- cv.glmnet(data.matrix(t2[,-c(1,2,7,12)]), t2[,2], family="multinomial")
должен выполнить работу.
Я получил ту же ошибку Msg. и, к сожалению, это было не так просто, как использовать данные.матрица() для меня.
ошибка возникает в перекрестном произведении входной матрицы и коэффициентов модели.
в предсказать.glmnet:
nfit = as.матрица (cbind2 (1, newx) %*% nbeta)
то, что решило проблему для меня, заставило x к dgCMatrix. Я серьезно не понимаю, почему, но это работает для меня.
predict(object = lm, newx = as(x, "dgCMatrix"), type = "response")
Так как я не видел это как ответ на один из многих вопросов, касающихся этой ошибки, я думал, что опубликую его здесь.
У меня было аналогичное сообщение об ошибке при использовании cv.glmnet. резюме.glmnet будет правильно работать в RStudio, но не будет работать при использовании Rscript. Исправление для меня было добавить в верхней части моего скрипта:
require(methods)
Кажется, что пакет " glmnet "может использовать некоторые функции из пакета" методы", но этот пакет не загружается при запуске при использовании Rscript. Однако пакет "методы" обычно загружается по умолчанию в R.
здесь информация об этой функции Rscript:
Rscript не загружает пакет методов, R делает, зачем и каковы последствия?
Я надеюсь, что это поможет кому-то, кто сталкивается с той же проблемой, что и я.