我正在创建一个使用包Matrix的S4类,然后使用setMethod为我的类重新定义“sin”
select r1.RouteId from RouteLocationDetails r1 join RouteLocationDetails r2 on r1.RouteId = r2.RouteId where r1.LocationId <> r2.LocationId and r1.LocationId = 'LocationNameOfC' and r2.LocationId = 'LocationNameOfF'
然而,即使在我开始使用我的课程之前,我遇到了一个问题
> library(Matrix)
> setClass("foo",slots=list(z="Matrix"))
> setMethod("sin",signature(x="foo"),function(x){return(cos(x@z))})
[1] "sin"
为什么第二次使用sin(y)会失败?这是我第一次使用S4课程进行编程。任何帮助将不胜感激。
答案 0 :(得分:1)
在某种程度上,这看起来像是应该报告给R-devel邮件列表的错误。但sin()
是Math
'群组通用'的成员(请参阅?GroupGenericFunctions
),可以实施
setMethod("Math", "foo", function(x) callGeneric(x@z))
答案 1 :(得分:0)
刚刚在一个类似问题的帖子中发布了替代解决方案 https://stackoverflow.com/a/37566785/2116352,而不必重载整个通用组。 tl; dr:重载包中的单个函数并加载包。