setMethod和包Matrix

时间:2015-12-11 10:44:12

标签: r s4

我正在创建一个使用包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课程进行编程。任何帮助将不胜感激。

2 个答案:

答案 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:重载包中的单个函数并加载包。