【发布时间】:2015-02-08 22:30:19
【问题描述】:
我有一个关于代码示例的问题:
testfunc<-function(x) {
f<-x^2
help.var<- somefunction(f)
g.grad<- 2* helpvar
return(c(f,g.grad))
}
当我尝试优化此函数时,例如 optim 希望我提供两个单独的函数,一个函数评估和一个梯度评估。所以,
optim(20,testfunc[1],testfunc[2])
给出:闭包类型的对象不是可子集的。
我通过定义两个函数来解决这个问题,并将 g.grad 定义为全局变量:
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)
由于原始问题涉及更多,因此代码很容易混淆。你有什么想法可以更优雅地解决这个问题(也许根本不使用全局变量)?
【问题讨论】:
标签: r