übergeben Ich arbeite an einer nichtlinearen Optimierung, mit der constrOptim.nl
aus das alabama
Paket. Allerdings ist mein Problem eher auf Argumente (und den Punkt-Punkt-Punkt (Ellipse/"...") und vielleicht do.call
) - so gebe ich zuerst ein allgemeines Beispiel und später beziehen Sie sich auf die constrOptim.nl
Funktion.R - Wie mit dem Punkt-Punkt-Punkt (Ellipse/"...") mit mehreren nachfolgenden Funktionen zu behandeln - dh nur einige der Variablen
Angenommen, ich habe folgende Funktionen - von dem ich nur die second
und third
aber nicht die first
bearbeiten.
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)
}
Der Ausgang ich will, ist das gleiche ich bekommen würde, wenn ich laufe nur
second("test", ttt='something special')
third("test", zzz="non-default")
Diese
"test"
"something special"
"test"
"non-default"
jedoch ist, den Code unten, dies nicht zu tun, nicht funktioniert.
first("test",second=second, third=third, ttt='something special',zzz="non-default")
Wie kann ich den Anruf oder die second
und third
Funktion ändern es funktioniert?
http://www.r-bloggers.com/r-three-dots-ellipsis/ Hier fand ich einen Hinweis, dass do.call
mir helfen konnte, aber im Moment bin ich nicht in der Lage zu verstehen, wie es funktionieren sollte.
Ich kann die first
Funktion ändern, da dies die constrOptim.nl
in meinem speziellen Problem ist - und es ist so ausgelegt, vorbei mehr Argumente auf verschiedene Funktionen fähig zu sein. Allerdings kann ich die second
und third
Funktion ändern - wie sie sind die Einschränkungen und die Funktion, die ich minimieren möchte. Natürlich kann ich auch den Aufruf der Funktion ändern.
So spezielleren, hier ist mein spezielles Problem zu sein: Ich führe ein Maximum-Likelihood-Schätzung mit nichtlinearen Einschränkungen:
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)
}
Jetzt nenne ich die constrOptim.nl
...
constrOptim.nl(par=rnorm(20), fn=minimize,hin=NULL heq=heq,VARresiduals,W)
... aber bekomme den gleichen Fehler, wie ich erhalte, wenn ich die first
Funktion oben anrufe - so etwas wie: "Fehler im zweiten (abc, ...): unbenutztes Argument (zzz =" non-default ").
Wie kann ich minimize
und heq
oder den Anruf ändern? :) Vielen Dank im Voraus
aktualisieren nach der Post als Duplikat markiert wurde: Die Antwort auf die im Zusammenhang Post ändert sich die first
Funktion in meinem Beispiel - wie setzt sie eine do.call dort, dass die anderen Funktionen aufruft . Allerdings kann ich die erste Funktion in meinem Beispiel nicht ändern, da ich die constrOptim.nl
eine Vielzahl von verschiedenen Funktionen arbeiten lassen möchte. Gibt es eine andere Art und Weise?
@baptiste Bitte beachten Sie mein Update. Vielleicht liege ich falsch, aber das verlinkte Duplikat scheint mein Problem nicht zu lösen. –
Just FYI der Begriff für eine Funktion mit einer variablen Anzahl von Argumenten (z. B. hat die Ellipse in R) ist eine Variadic-Funktion. Nützlich für zukünftige Google-Fu :) –