【发布时间】:2016-06-01 19:01:13
【问题描述】:
在尝试重载 + 运算符并使用带有稀疏矩阵的 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
如果矩阵不是稀疏的,则不会发生错误。我定义的 + 和 sparseMatrix 的 + 之间是否存在一些干扰?我没有正确定义+ 运算符吗?
谢谢!
【问题讨论】:
-
我看不出这不是 S4 错误 - 我建议将其发送到 John Chambers 会看到的 R-devel。
标签: r operator-overloading sparse-matrix s4