gpt4 book ai didi

r - R中函数的运算符重载 - 奇怪的行为

转载 作者:行者123 更新时间:2023-12-04 07:40:01 26 4
gpt4 key购买 nike

不幸的是像 (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" 设为 "+.ownfunction" ,然后 (a+a)(2) 起作用。

看来function类以某种特殊方式处理:如果您运行 debug("+.function");(a+a)(2)你看"+.function"甚至不被称为。

编辑:见评论。

关于r - R中函数的运算符重载 - 奇怪的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15432273/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com