我想最小化函数的前11个(或任何大数)参数,其总共需要15个(或任何大于11 /所述第一个数字的参数)参数。问题是当我使用带有optim
的{{1}}函数作为前11个值时,无法计算该函数,因为它仅为其第一个参数获取所有11个值。有没有办法强制每个输入参数为标量/单个数字?
更具体一点:
par=c(...)
尝试运行此代码总是以错误消息结束: fn(par,...)中的错误:缺少参数“m1”,没有默认值。通过打印出参数,我认为该函数假定来自fun_to_optim <- function(m1,m2,m3,m4,m5,m6,m7,m8,m9,m10,m11,p1,p2,p3,p4)
{
# I want to make sure m1 to m11 are single numbers and no vectors
...
}
# optimization
optim(par=c(0,0,0,0,0,0,0,0,0,0,0),fn=fun_to_optim,p1=data,p2=opt,p3=data,p4=1)
的所有值都用于输入变量par
。因此,m1
被视为具有通过m1
给出的初始值的向量。
请注意:我知道可以简单地将前11个参数放入向量(比如par
),然后像我一样调用para_to_optim
函数。但是,我明确地不想这样做,因为我需要迭代地优化参数,即从仅1个参数开始到结束将全部11个。使用不同的输入参数结构写入函数11次似乎有点低效。
我已经检查了Forcing specific data types as arguments to a function和How to define argument types for R functions?等函数参数的类似帖子,但在我的情况下检查函数和包装器或S3类中的参数类型是不可能的也有问题。还有其他方法可以解决这个问题吗?