+
演算子をオーバーロードしようとして、Matrix
パッケージを疎行列で使用すると、奇妙な効果が得られます。最初に、Matrix パッケージを使用しないが+
演算子を持つ非常に単純なクラスを定義します。次に、2 つの疎行列を合計します。最初のM+M
加算では期待どおりの結果が得られますが、2 番目の加算ではエラーがスローされます。エラーを生成する非常に単純なコードを次に示します。
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
2 番目の追加では、次のエラーがスローされます。
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 define と+
for sparseMatrixの間に干渉はありますか? +
演算子を正しく定義していませんか?
ありがとうございました!