R 集合方法与包矩阵

R 集合方法与包矩阵,r,s4,R,S4,我正在创建一个S4类,它使用包矩阵,然后使用setMethod为我的类重新定义“sin” > library(Matrix) > setClass("foo",slots=list(z="Matrix")) > setMethod("sin",signature(x="foo"),function(x){return(cos(x@z))}) [1] "sin" 然而,甚至在我开始使用我的类之前,我就遇到了一个问题 > y<-Matrix(c(1,2,1,2),2,

我正在创建一个S4类,它使用包矩阵,然后使用setMethod为我的类重新定义“sin”

> library(Matrix)
> setClass("foo",slots=list(z="Matrix"))
> setMethod("sin",signature(x="foo"),function(x){return(cos(x@z))})
[1] "sin"
然而,甚至在我开始使用我的类之前,我就遇到了一个问题

> y<-Matrix(c(1,2,1,2),2,2)
> sin(y)
2 x 2 Matrix of class "dgeMatrix"
          [,1]      [,2]
[1,] 0.8414710 0.8414710
[2,] 0.9092974 0.9092974
> sin(y)
Error in match(x, table, nomatch = 0L) : object '.Generic' not found
>y sin(y)
2 x 2“矩阵”类矩阵
[,1]      [,2]
[1,] 0.8414710 0.8414710
[2,] 0.9092974 0.9092974
>单(y)
匹配(x,表格,nomatch=0L)中出错:找不到对象“.Generic”

为什么第二次使用sin(y)失败了?这是我第一次尝试用S4类编程。任何帮助都将不胜感激。

在某种程度上,这看起来像是一个应该向邮件列表报告的错误。但是
sin()
Math
“group generic”(参见
?GroupGenericFunctions
)的成员,可以实现

setMethod("Math", "foo", function(x) callGeneric(x@z))

刚刚发布了一个类似问题的备选解决方案 而不必使整个泛型组过载。 tl;dr:重载包中的单个函数并加载包