我为R中的S4类重载了determinant
函数。基类determinant
函数返回一个包含元素modulus
和sign
的列表;但是,值是我的S4对象(*
被重载)。然后我重新定义了det
函数(我必须深入研究Matrix
包的源代码以找出如何做到这一点,这本身就是一个恐怖的方式。)为{{1与我的环境。
由于我不明白的原因,base::det
的定义如下:
base::det
在我的对象上调用时,function (x, ...)
{
z <- determinant(x, logarithm = TRUE, ...)
c(z$sign * exp(z$modulus))
}
按预期计算,z
和z$sign
正常。我重载了z$modulus
和*
,以便exp
评估我的某个对象。
但为什么 z$sign * exp(z$modulus)
?
当包含在c
中时,返回值不再是标量数字,而是包含一个元素的列表:我的对象。这不是我想要的,它打破了我的单元测试。一些可选的解决方法:
c()
,可能会破坏det
所需的一切。c()
(或者它是c()
?)。我甚至不知道该怎么做。建议的解决方案是什么,我该如何处理?使用as.vector
记录此混乱的正确方法的额外要点。
(作为参考,该软件包现在位于https://github.com/shabbychef/madness的github上)
修改 MWE看起来如下:
roxygen2