尝试重载+
运算符并将Matrix
包与稀疏矩阵一起使用时,我得到了一个奇怪的效果。我首先定义了一个非常简单的类,它不使用 Matrix 包但有一个+
操作符。然后我对两个稀疏矩阵求和。第一个M+M
添加提供了预期的结果,但第二个抛出了错误。这是一个生成错误的非常简单的代码:
require(Matrix)
setClass("TestM",representation(M='numeric'))
setMethod("initialize", "TestM", function(.Object,x) {
.Object@M = x
.Object
})
setMethod("+", c("TestM","TestM"), function(e1,e2) {
e1@M + e2@M
})
M = Matrix(diag(1:10),sparse=T)
M+M # > FINE
M+M # > ERROR
M = Matrix(diag(1:10),sparse=F)
M+M # > FINE
M+M # > FINE
第二次添加会引发以下错误:
Error in forceSymmetric(callGeneric(as(e1, "dgCMatrix"), as(e2, "dgCMatrix"))) :
error in evaluating the argument 'x' in selecting a method for function
'forceSymmetric': Error in .Arith.Csparse(e1, e2, .Generic, class. = "dgCMatrix") :
object '.Generic' not found
如果矩阵不是稀疏的,则不会发生错误。+
I 定义和+
for sparseMatrix之间是否存在一些干扰?我没有+
正确定义运算符吗?
谢谢!