重载c()或修改base :: det?

时间:2015-12-02 05:05:20

标签: r concatenation overloading s4 determinants

我为R中的S4类重载了determinant函数。基类determinant函数返回一个包含元素modulussign的列表;但是,值是我的S4对象(*被重载)。然后我重新定义了det函数(我必须深入研究Matrix包的源代码以找出如何做到这一点,这本身就是一个恐怖的方式。)为{{1与我的环境。

由于我不明白的原因,base::det的定义如下:

base::det

在我的对象上调用时,function (x, ...) { z <- determinant(x, logarithm = TRUE, ...) c(z$sign * exp(z$modulus)) } 按预期计算,zz$sign正常。我重载了z$modulus*,以便exp评估我的某个对象。

但为什么 z$sign * exp(z$modulus)

当包含在c中时,返回值不再是标量数字,而是包含一个元素的列表:我的对象。这不是我想要的,它打破了我的单元测试。一些可选的解决方法:

  1. 重写c(),可能会破坏det所需的一切。
  2. 以某种方式为我的对象重载c()(或者它是c()?)。我甚至不知道该怎么做。
  3. 别的什么?
  4. 建议的解决方案是什么,我该如何处理?使用as.vector记录此混乱的正确方法的额外要点。

    (作为参考,该软件包现在位于https://github.com/shabbychef/madness的github上)

    修改 MWE看起来如下:

    roxygen2

0 个答案:

没有答案