从列表加载r中的稀疏矩阵
嗨,我有一个文件的结构如下从列表加载r中的稀疏矩阵,r,sparse-matrix,R,Sparse Matrix,嗨,我有一个文件的结构如下 12 45 56 34 65 31 12 23 43 等等,我有一个巨大的数据集 所以我的文本文件有3列,但是,我想要创建稀疏矩阵的方式是,每行12 45 56。。。。。第一个数字,即行,第二个数字,即45是列,第三个数字(即56)是稀疏矩阵第12行和第45列的值 我做以下几点 >x = scan('data.txt',what=list(integer(),integer(),numeric())) Read 619444
12 45 56
34 65 31
12 23 43
等等,我有一个巨大的数据集
所以我的文本文件有3列,但是,我想要创建稀疏矩阵的方式是,每行12 45 56。。。。。第一个数字,即行,第二个数字,即45是列,第三个数字(即56)是稀疏矩阵第12行和第45列的值
我做以下几点
>x = scan('data.txt',what=list(integer(),integer(),numeric()))
Read 61944406 records
> library('Matrix')
Loading required package: lattice
N
> N= sparseMatrix(i=x[[1]],j=x[[2]],x=x[[3]])
但是我得到了这个错误
Error in validObject(r) :
invalid class “dgTMatrix” object: all row indices (slot 'i') must be between 0 and nrow-1 in a TsparseMatrix
有人能帮我找出我做错了什么吗?当您使用
x[[1]]
时,您指的是x矩阵的第一个元素,在这种情况下x[[1]]=12
。如果需要索引列或行的x[1,]
,则必须使用x[,1]
。
试试这个:
x = matrix(c(12,45,56,
34,65,31,
12,23,43), nrow=3, byrow=TRUE)
N= sparseMatrix(i=x[,1], j=x[,2], x=x[,3])
编辑:我复制了您的错误:
x = matrix(c( 0,45,56,
34,65,31,
12,23,43), nrow=3, byrow=TRUE)
N= sparseMatrix(i=x[,1], j=x[,2], x=x[,3])
Error en validObject(r) :
invalid class “dgTMatrix” object: all row indices (slot 'i') must be between 0 and nrow-1 in a TsparseMatrix
因此,请确保第一列中没有0,我遇到了完全相同的问题,尝试了许多方法后,通过阅读sparseMatrix函数的帮助找到了解决方案。参数index1指定索引是从1开始还是从0开始
N= sparseMatrix(i=x[[1]],j=x[[2]],x=x[[3]], index1=FALSE)
我想要最后的稀疏矩阵,如第12行第45列是56行第34行第65列是31,依此类推,你的方法会给我吗?这会给我x[,1]中的错误:维数不正确,正如你在问题中看到的,我有61944406行,我不会手动从中生成矩阵。首先,使用
str(x)
查看您的数据是如何显示的。然后,您可以使用x=as.matrix(x)
生成一个矩阵。这应该是可行的。我想你是从扫描得到一个向量。试试这个:x