嗨我有一个结构如下的文件
12 45 56
34 65 31
12 23 43
等我有一个庞大的数据集
所以我的文本文件有3列但是,我想创建稀疏矩阵的方式是每行代表12 45 56 .....第一个数字即行第二个数字,即45是列和第三个number(即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
有谁可以帮我弄清楚我做错了什么?
答案 0 :(得分:5)
我遇到了完全相同的问题,在尝试了许多事情后,解决方案来自于阅读sparseMatrix函数的帮助。参数index1指定索引是从1开始还是从0开始。
N= sparseMatrix(i=x[[1]],j=x[[2]],x=x[[3]], index1=FALSE)
答案 1 :(得分:4)
当您使用x[[1]]
时,您正在引用x 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
因此,请确保您的2个第一列中没有0