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