Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从列表加载r中的稀疏矩阵_R_Sparse Matrix - Fatal编程技术网

从列表加载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