2017-02-15 3 views
0

Я оптимизирую простую функцию в r, используя 'nloptr', и мне трудно передать аргументы в объектную функцию. Вот код, я использую:Передача аргументов nloptr в r

require("nloptr") 

Correl <- matrix(c(1,-.3,-.3,1), nrow=2, ncol=2) 
Wghts <- c(.01,.99) 
floor <- .035 
expret <- c(.05,.02) 
pf.return <- function(r, x, threshold=0){ 

return(r * x - threshold) 
} 

pf.vol <- function(x, C){ 

return(sqrt(x %*% C %*% x)) 
} 

res <- nloptr(x0=Wghts,eval_f = pf.vol,eval_g_ineq=pf.return,opts=list(algorithm="NLOPT_GN_ISRES"), x=Wghts,C=Correl)

(я знаю, что я пропускаю параметры здесь, но я пытаюсь выделить поведение я не понимаю) Бег это дает следующее сообщение об ошибке:

Error in .checkfunargs(eval_f, arglist, "eval_f") : x' passed to (...) in 'nloptr' but this is not required in the eval_f function.

Просто чтобы посмотреть, что происходит, я могу попробовать запустить его без й аргумента:

res <- nloptr(x0=Wghts,eval_f = pf.vol,eval_g_ineq=pf.return,opts=list(algorithm="NLOPT_GN_ISRES"), C=Correl)

, который дает ошибку:

Error in .checkfunargs(eval_g_ineq, arglist, "eval_g_ineq") : eval_g_ineq requires argument 'x' but this has not been passed to the 'nloptr' function.

Так включая x выдает ошибку, что нет необходимости и опуская он бросает (по крайней мере, понятным) сообщение об ошибке, что она была опущена.

ответ

1

Ok для потомков:

Я переписал функции так, чтобы они имели один и тот же набор аргументов, в том же порядке.

Я также пропустил бит x=Wghts, так как это параметр, который я пытаюсь выполнить.