我在R
中有一个稀疏矩阵我现在希望在R
上执行非负矩阵分解data.txt是我使用python创建的文本文件,它由3列组成,其中第一列指定行号,第二列指定列号,第三列指示值
data.txt中
1 5 10
3 2 5
4 6 9
原始data.txt包含164009行,这是250000x250000稀疏矩阵的数据
我使用了NMF库而我正在做
>x=scan('data.txt',what=list(integer(),integer(),numeric()))
>library('Matrix')
>R=sparseMatrix(i=x[[1]],j=x[[2]],x=x[[3]])
>res<-nmf(R,3)
它给了我一个错误 函数错误(classes,fdef,mtable): 无法找到函数nmf的继承方法,用于签名 “dgCMAtrix”,“失踪”,“失踪”
任何人都可以帮我弄清楚我做错了什么
答案 0 :(得分:3)
第一个问题是您正在向nmf提供dgCMatrix。
> class(R)
[1] "dgCMatrix"
attr(,"package")
[1] "Matrix"
帮助在这里:
help(nmf)
请参阅“方法”部分。它想要一个真正的矩阵。由于条目数量的原因,对as.matrix的胁迫很可能对你没有太大帮助。
现在,即使使用您的示例数据,对矩阵的强制也不够,如下所示:
> nmf(as.matrix(R))
Error: NMF::nmf : when argument 'rank' is not provided, argument 'seed' is required to inherit from class 'NMF'. See ?nmf.
让我们给它一个等级:
> nmf(as.matrix(R),2)
Error in .local(x, rank, method, ...) :
Input matrix x contains at least one null row.
确实如此:
> R
4 x 6 sparse Matrix of class "dgCMatrix"
[1,] . . . . 10 .
[2,] . . . . . .
[3,] . . 5 . . .
[4,] . . . . . 9