我对代码示例有一个问题:
testfunc<-function(x) {
f<-x^2
help.var<- somefunction(f)
g.grad<- 2* helpvar
return(c(f,g.grad))
}
当我尝试优化此功能时,例如,我希望我提供两个独立的功能,一个功能评估和一个梯度评估。所以,
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)
由于原始问题涉及得更多,代码很容易混淆。你有任何想法更优雅地解决这个问题(可能根本没有使用全局变量)?
答案 0 :(得分:0)
假设您的问题是如何在对象中存储两个函数,那么一个可能的解决方案是
testfunc <- list(
f = function(x) x^2,
g.grad = function(x) 2*x
)
然后你可以做
optim(20,testfunc[[1]],testfunc[[2]])