gpt4 book ai didi

r - 在 R : turn list of functions into one big function (element-wise sum of functions)

转载 作者:行者123 更新时间:2023-12-05 00:25:53 24 4
gpt4 key购买 nike

我有一个函数列表,我想将它们添加到一个“大”函数中。例子:

funlist=list()  
funlist[[1]]=exp(x1)
funlist[[2]]=sin(x2)

期望的结果:
bigfun = exp(x1) + sin(x2)

我知道对于数字情况可以使用 reduce("+", list) ,但是上面的非数字情况呢?

请注意:我正在寻找一种通用的自动化解决方案,即功能列表可能会有所不同(功能本身和列表长度/功能数量),但列表中的所有功能必须最终添加到一个最后的术语中.每个函数都应该有自己必须提供的值(例如 x1 到 funlist[[1]],x2 到 funlist[[2]] 等)。

重要提示:然后将 bigfun 项传递给优化器 (optim) 以找到每个函数的最佳值,从而最大化所有函数的结果。

编辑:
为简单起见,我选择了函数 exp(x1) 和 sin(x2)。函数本身就是函数包装器,例如
function(x) {y1*x + y2*x^2 + y3*x^3} ,其中 y1, y2, y3 之前已经计算过。

最佳答案

这是一种将函数存储在列表中的函数式编程方法。

funs <- c(sin,exp)

bigfun<-function(x,funs){
sum(sapply(funs, function(f) f(x)))}

bigfun(x=10,funs=funs)

从哈德利·威克姆 (Hadley Wickham) 那里了解到:
http://adv-r.had.co.nz/Functional-programming.html#lists-of-functions

**编辑**提供多个值(即每个函数的不同值):
bigfun2<-function(vec,funs){vf<-function(vec,funs){funs(vec)} 
sum(sapply(1:length(vec),function (i) vf(vec[i],funs[[i]])))}

optim(par=initvec,fn=bigfun2,funs=funs)

这假设您有一个等于数据向量长度的函数列表,其中 funs是您的函数列表和 vec是你的数据向量。在优化示例中,只需设置一个向量 initvec初始起始值的长度等于 funs ,它作为附加参数传递给 optim

关于r - 在 R : turn list of functions into one big function (element-wise sum of functions),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23308581/

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