3

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

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

谁能帮我弄清楚我做错了什么?

4

2 回答 2

6

我遇到了完全相同的问题,在尝试了很多事情之后,解决方案来自阅读 sparseMatrix 函数的帮助。参数 index1 指定索引是从 1 开始还是从 0 开始。

N= sparseMatrix(i=x[[1]],j=x[[2]],x=x[[3]], index1=FALSE)
于 2013-01-09T14:58:16.497 回答
4

当您使用时,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

因此,请确保您的前 2 个列中没有 0

于 2012-04-19T15:26:25.637 回答