不幸的是像这样的事情(f+g)(3)
其中 f 和 g 都是一元函数,在 R 中不起作用。因此,我尝试通过以下方式重载一元函数的“+”运算符:
"+.function" = function(e1, e2){
return(function(x) e1(x) + e2(x))
}
但如果我尝试使用它,这将不起作用。代码
a = function(x) 2*x
(a+a)(2)
产生相同的错误,就像+.function
甚至没有定义。
经过一段时间的研究,我发现实际上可以通过这种方式添加函数:如果函数是引用类的成员函数,那么这是可行的!即,以下代码(连同上面的“+”定义)
clsA = setRefClass("clsA",
methods = list(
b = function(x) 2*x
))
inst_a = clsA$new()
(inst_a$b + inst_a$b)(2)
返回“8”(如预期)。因此,我已经对我的问题有了某种解决方法。现在我的问题是:
这种奇怪行为的原因是什么?为什么不+.function
关心“普通”函数而不是类成员函数?有谁知道如何将运算符“扩展到”常用功能?
如果你重新定义类a
,例如像class(a)<-"ownfunction"
(或者更好的是class(a)<-c("ownfunction","function")
,并让你的"+.function"
as "+.ownfunction"
, then (a+a)(2)
works.
看来function
类以某种特殊方式对待:如果你运行debug("+.function");(a+a)(2)
你看到了"+.function"
甚至没有被调用。
编辑:参见评论。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)