从列表中加载r中的稀疏矩阵

时间:2012-04-19 15:18:06

标签: r sparse-matrix

嗨我有一个结构如下的文件

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

有谁可以帮我弄清楚我做错了什么?

2 个答案:

答案 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