【问题标题】:Loading a sparse matrix in r from list从列表中加载 r 中的稀疏矩阵
【发布时间】:2012-04-19 15:18:06
【问题描述】:

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

12    45    56
34    65    31
12    23    43

等等我有一个巨大的数据集

所以我有一个包含 3 列的文本文件,但是,我想要创建稀疏矩阵的方式是,对于每一行说 12 45 56..... 第一个数字,即行第二个数字,即 45 是列和第三number(i.e. 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

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

【问题讨论】:

    标签: r sparse-matrix


    【解决方案1】:

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

    N= sparseMatrix(i=x[[1]],j=x[[2]],x=x[[3]], index1=FALSE)
    

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 我想要最终的稀疏矩阵,比如第 12 行第 45 列是 56 第 34 行第 65 列是 31 等等,你的方法会给我吗?
      • 这给了我 x[,1] 中的错误:维数不正确
      • 老兄,正如您在问题中看到的那样,我有 61944406 行我不会手动从中制作矩阵
      • 首先,使用str(x) 查看您的数据情况。然后,您可以使用x=as.matrix(x) 生成一个矩阵。这应该可行。
      • 我认为您从scan 获得了一个向量。试试这个:x <- matrix(scan('data.txt'), ncol=3),然后尝试创建稀疏矩阵
      猜你喜欢
      • 2023-03-19
      • 1970-01-01
      • 2021-03-17
      • 1970-01-01
      • 1970-01-01
      • 2011-06-24
      • 1970-01-01
      • 1970-01-01
      • 2015-07-24
      相关资源
      最近更新 更多