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

标签 r list function

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

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/

相关文章:

r - 在 matlab 函数中处理 NaN

r - 如何根据 R 中的时间矩阵对点进行排序?

Python:从多个文件读取数据到二维numpy数组或列表的方法

list - Haskell 中列表的递归函数

javascript - 函数不会记住变量

r - 检查多个数据帧的数据类型的函数 R

r - 如何从访问过的地方列表(有效地)构建边缘列表?

Python 3 - 基于字符串的字典搜索列表

c# - 当我不能使函数本身成为静态时如何调用非静态函数

c++ - C++ 中的 "Evaluate function"