Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
稀疏.model.matrix在R中丢失行_R_Matrix_Sparse Matrix - Fatal编程技术网

稀疏.model.matrix在R中丢失行

稀疏.model.matrix在R中丢失行,r,matrix,sparse-matrix,R,Matrix,Sparse Matrix,我正在处理常规的数据。对于glm函数来说,帧看起来太大了,所以我决定处理一个模型矩阵的稀疏表示,这样我就可以将这个稀疏矩阵放入glmnet函数中。但是sparse.model.matrix看起来像是从原始矩阵中删除了一些行。知道为什么会发生这种情况吗?有什么办法可以避免这种情况? 代码如下: > mm <- sparse.model.matrix(~clicks01+kl_tomek*bc1+hours+plec+1, data = daneOst) > dim(mm) [1

我正在处理常规的
数据。对于
glm
函数来说,帧
看起来太大了,所以我决定处理一个模型矩阵的稀疏表示,这样我就可以将这个稀疏矩阵放入
glmnet
函数中。但是
sparse.model.matrix
看起来像是从原始矩阵中删除了一些行。知道为什么会发生这种情况吗?有什么办法可以避免这种情况? 代码如下:

> mm <- sparse.model.matrix(~clicks01+kl_tomek*bc1+hours+plec+1, 
data = daneOst)
> dim(mm)
[1] 1253223     292
> dim(daneOst)
[1] 1258836       6
>毫米尺寸(毫米)
[1] 1253223     292
>dim(daneOst)
[1] 1258836       6
这是由于NA的原因

运行
sum(complete.cases(mm))
。我打赌它也会给你1253223


因此,请将数据帧中的NA替换为一个值(例如“插补NA”或-99999),然后重试。

@WillemM
是正确的。
NAs
的存在将使稀疏矩阵跳闸。对于大数据集,最好的方法是使用
stringsAsFactors=FALSE
将文件读入数据框,然后选择所需的插补方法。如果您选择使用基于树的学习方法,则更容易使用数据集中不存在的内容来插补这些
NAs
。对大数据集的多重插补将花费非常长的时间,而且您可能会丢失R会话

我成功地将
na.action
更改为
na.pass
,这包括我矩阵中的所有行:

options(na.action='na.pass')
请注意,这是一个全局选项,因此您可能希望在之后将其设置回原始值,以免弄乱代码的其余部分

previous_na_action <- options('na.action')
options(na.action='na.pass')
# Do your stuff...

options(na.action=previous_na_action$na.action)

上一个\u na\u操作注意,我将此用于基于树的模型,这些模型可以处理na值。YMMV我认为这是迄今为止最好的解决方案。这就是为什么我接受这个答案。