gpt4 book ai didi

r - 两个函数相乘

转载 作者:行者123 更新时间:2023-12-04 11:14:15 25 4
gpt4 key购买 nike

有谁知道如何对 R 中的两个数学函数进行乘法或执行任何二元运算?

我正在尝试采取以下措施:

f<-function(x){x+2}
g<-function(x){x}

我想要 h = f * g ,最终整合 h .类似的事情我需要做很多次,所以输入 h手动不是一个可行的选择。

最佳答案

如果您要创建许多乘法函数,请创建一个乘法器函数,该函数返回一个函数,该函数是其函数参数的乘积:

Multiply=function(a,b){
force(a)
force(b)
function(x){a(x)*b(x)}
}

然后你可以这样做:
 f<-function(x){x+2}
g<-function(x){x}
h=Multiply(f,g)
h(1:5)
[1] 3 8 15 24 35
f(1:5)*g(1:5)
[1] 3 8 15 24 35

进而:
h2=Multiply(f,f)
h2(1:5)
[1] 9 16 25 36 49
f(1:5)*f(1:5)
[1] 9 16 25 36 49

你可以将它与任何函数一起使用:
h3 = Multiply(sqrt,sin)
h3(1:5)
[1] 0.841471 1.285941 0.244427 -1.513605 -2.144220
sqrt(1:5)*sin(1:5)
[1] 0.841471 1.285941 0.244427 -1.513605 -2.144220

您使用 Multiply 创建的任何函数function 将是一个函数,它返回两个函数的元素乘积。

使用这样的函数进行编程通常非常有用。有一个 R 包, functional , 有这种东西的一些功能,包括 Compose这就像你的情况,但构造 f(g(x))而不是 f(x)*g(x) :
require(functional)
z=Compose(sqrt,sin)
z(1:5)
[1] 0.8414710 0.9877659 0.9870266 0.9092974 0.7867491
sin(sqrt(1:5))
[1] 0.8414710 0.9877659 0.9870266 0.9092974 0.7867491

请注意,它总是圆括号(圆括号),因为它们仍然是函数。它们恰好是由其他函数创建的。

还要注意 force 的使用在 Multiply函数 - 这是因为参数 abMultiply 时不评估函数被调用 - 只有在调用返回的函数时才会对它们进行评估。如果 fg h之前被更改或删除被调用,然后没有 force然后 h将获得 f 的值和 g当时 h被调用,而不是它被定义的时间。这可能会导致一些令人恼火的难以发现的错误。

关于r - 两个函数相乘,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20823228/

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