Как повторить элементы в функции c ()? - PullRequest
0 голосов
/ 11 февраля 2020

Я использую функцию объединения c() для определения gradient:

eval_f <- function( x, param, n ) { 
return(list("objective" = x[5] * (param[1] - param[2] / sum(x[1:4])),
             "gradient" =     c( x[5] * param[2] / (x[1] * x[1]), 
                                 x[5] * param[2] / (x[2] * x[2]), 
                                 x[5] * param[2] / (x[3] * x[3]), 
                                 x[5] * param[2] / (x[4] * x[4]),
                                    param[1] - param[2] / sum(x[1:4])  
                           ) ) )
}

Можно видеть, что градиент включает элементы, имеющие одинаковую структуру: x[5] * param[2] / (x[...] * x[...])

Вопрос. Можно ли использовать стандартную функцию (например, rep(c(...), times=n)) для создания gradient?

1 Ответ

2 голосов
/ 11 февраля 2020

Вы можете сделать:

eval_f <- function( x, param, n ) { 
  return(list(objective = x[5] * (param[1] - param[2] / sum(x[1:4])),
              gradient =  c(x[5] * param[2] / (x[1:4]^2), 
                               param[1] - param[2] / sum(x[1:4])  
          )))
}

Или также можете использовать (x[1:4] * x[1:4]), если вы предпочитаете это вместо (x[1:4]^2).

...