首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用子集函数和optim()

使用子集函数和optim()
EN

Stack Overflow用户
提问于 2015-02-09 06:30:20
回答 1查看 52关注 0票数 0

关于代码示例,我有一个问题:

代码语言:javascript
运行
复制
testfunc<-function(x) {
   f<-x^2
   help.var<- somefunction(f)
   g.grad<- 2* helpvar
   return(c(f,g.grad))
}

例如,当我试图优化这个函数时,optim希望我提供两个单独的函数,一个函数求值和一个梯度求值。所以,

代码语言:javascript
运行
复制
optim(20,testfunc[1],testfunc[2])   

给定:闭包类型的对象是不可子集的。

我通过定义两个函数并将g.grad定义为全局变量来解决这个问题:

代码语言:javascript
运行
复制
testfunc1<-function(x) {
          f<-x^2
          help.var<<- somefunction(f)

           return(f)
}
help.function<-function(x){
           return(2*help.var)
}
optim(20,testfunc1,help.function)

由于原始问题更加复杂,代码变得容易混淆。你有没有办法更优雅地解决这个问题(也许根本不使用全局变量)?

EN

回答 1

Stack Overflow用户

发布于 2015-02-09 06:38:13

假设您的问题只是如何在一个对象中存储两个函数,那么一个可能的解决方案是

代码语言:javascript
运行
复制
testfunc <- list(
   f = function(x) x^2,
   g.grad = function(x) 2*x
)

然后你可以这样做

代码语言:javascript
运行
复制
optim(20,testfunc[[1]],testfunc[[2]])
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28400128

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档