constrOptim.nl
我正在使用来自alabama
包的非线性优化。但是,我的问题更多地与传递参数有关(以及点-点-点(省略号/“...”),也许还有do.call
)-所以我首先给出一个一般示例,然后再参考该constrOptim.nl
函数。
假设,我有以下功能 - 我只能编辑second
和third
但不能first
编辑.
first<-function (abc, second, third, ...){
second(abc,...)
third(abc,...)
}
second<- function(abc, ttt='nothing special'){
print(abc)
print(ttt)
}
third<- function(abc, zzz="default"){
print(abc)
print(zzz)
}
我想要的输出与我刚运行时得到的输出相同
second("test", ttt='something special')
third("test", zzz="non-default")
这是
"test"
"something special"
"test"
"non-default"
但是,下面的代码无法做到这一点。
first("test",second=second, third=third, ttt='something special',zzz="non-default")
如何更改调用或second
andthird
函数以使其正常工作?
http://www.r-bloggers.com/r-three-dots-ellipsis/
在这里我找到了一些可以帮助我的建议,do.call
但目前我无法理解它应该如何工作。
我无法更改first
函数,因为这是constrOptim.nl
我的特定问题 - 它旨在能够将更多参数传递给不同的函数。但是,我可以更改second
andthird
功能 - 因为它们是我想要最小化的限制和功能。显然我也可以改变函数的调用。
所以更具体地说,这是我的具体问题:我使用非线性限制执行最大似然估计:
minimize <- function(Param,VARresiduals){
#Blahblah
for (index in 1:nrow(VARreisduals)){
#Likelihood Blahbla
}
return(LogL)
}
heq<-function(Param,W){
B<-Param[1:16]
restriction[1]<-Lrestriction%*%(diag(4)%x%(solve(W))%*%as.vector(B))
restriction[2:6]<-#BlablaMoreRestrictions
return(restriction)
}
现在我打电话给constrOptim.nl
...
constrOptim.nl(par=rnorm(20), fn=minimize,hin=NULL heq=heq,VARresiduals,W)
...但是得到相同的错误,正如我在调用first
上面的函数时收到的那样 - 类似:“第二个错误(abc,...):未使用的参数(zzz =“非默认”)”。
我该如何更改minimize
和heq
/或通话?:) 提前致谢
帖子被标记为重复后更新:相关帖子的答案更改了first
我的示例中的函数 - 因为它在那里实现了一个 do.call,它调用了其他函数。但是,我无法更改示例中的第一个功能,因为我想保持constrOptim.nl
各种不同功能的工作。还有其他方法吗?