0
我有一个关于该代码示例一个问题工作:与subsettable功能和Optim()
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)
由于原来的问题是更多地参与,代码变得很容易混淆。你有任何想法解决这个问题更优雅(可能根本不使用全局变量)?
这绝对是一种解决方案,I'寻找。在你的建议后,我注意到我的例子缺乏一个重要的特征:渐变取决于功能评估。 X^2可能不是这里最好的例子。 – Daniel 2015-02-08 23:01:20
那么为什么你不能在这个解决方案中使用'g.grad = function(x)2 * somefunction(x)'?我没有看到问题。由于'somefunction'没有被定义,所以你可重复的例子不再是可重复的。 – MrFlick 2015-02-08 23:08:59