R optim,我可以把一个列表传递给参数:par吗?

R optim,我可以把一个列表传递给参数:par吗?,r,R,问题: 我正在使用optim优化我的功能。但是,我的函数有两个参数,第一个是标量,第二个是动态长度向量 我用一个列表初始化了参数,然后将其传递给optim函数。提高以下错误,似乎OpTIM中的PAR只能得到一个VACTER输入?由于我的第二个参数具有动态长度,因此很难使用参数向量,然后使用y进行切片。您必须更改目标函数,因为正如Bhas所说,优化解算器需要参数作为向量。如果很难更改obj函数,可以为其编写一个包装器,将输入向量拆分为一个列表 obj_wrap <- function(x)

问题:

我正在使用optim优化我的功能。但是,我的函数有两个参数,第一个是标量,第二个是动态长度向量


我用一个列表初始化了参数,然后将其传递给optim函数。提高以下错误,似乎OpTIM中的PAR只能得到一个VACTER输入?由于我的第二个参数具有动态长度,因此很难使用参数向量,然后使用y进行切片。您必须更改目标函数,因为正如Bhas所说,优化解算器需要参数作为向量。如果很难更改obj函数,可以为其编写一个包装器,将输入向量拆分为一个列表

obj_wrap <- function(x) {
    obj(list(x[1], x[2:length(x)]))  ## CORRECTED
}

这看起来有点笨拙,但可能会给出正确的结果。

不,你不能做你想做的事。传递给optim的函数只能采用固定长度的向量。@当我们固定para_initial时,函数参数的长度与para_initial相同,因此optim可以对其执行。我认为必须有办法来解决这个问题,否则为什么LM与动态数据框工作得很好?不能简单地说PAR= unListPalaIn初始吗?我用向量参数失败了,因为第二个元素的长度是动态的。如果你能做到这一点,你能给出一个代码示例吗@难道x[2,lengthx]不应该是x[-1]?还是x[2:lengthx]?
obj <- function(para){
  ### input:
  ### para is a list with 2 elements.first element is scalar, second element is vector 

  # x is a scalar, stored in the first position of para list
  x <- para[[1]]
  # y is a vector with unfixed length, so I store it in the second element in a list
  y <- para[[2]] 

  value <- x^2 + sum(y^2)
  return(value)
}

para_initial = list(1,c(0,1))

optim(par = list(1,c(0,1)),fn = obj)
obj_wrap <- function(x) {
    obj(list(x[1], x[2:length(x)]))  ## CORRECTED
}
para_initial = list(1,c(0,1))

optim(unlist(para_initial), fn = obj_wrap)
## $par
[1]  4.575264e-05  1.710995e-05 -5.172657e-05
## ...