【发布时间】:2019-12-31 16:01:32
【问题描述】:
问题:
我正在使用optim 来优化我的功能。但是,我的函数有 2 个参数,第一个是标量,第二个是动态长度向量。
我用列表初始化参数,然后传递给optim 函数。引发如下错误,看来par in optim 只能得到一个vactor 输入?由于我的第二个参数具有动态长度,因此很难使用参数向量然后用y <- para_vector[slice] 切片将它们传递给y。
例如:
# I dont know the length of second elements
para <- c(1,3,2, ... ,283)
x <- para[1]
# I can't slice the vector and pass value to y
y <- para[2:?]
代码:
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)
输出:
优化错误(par = list(1, c(0, 1)), fn = obj): (list) 对象不能被强制输入'double'
【问题讨论】:
-
不,你不能做你想做的事。传递给
optim的函数只能采用固定长度的向量。 -
@Bhas 当我们修复
para_initial时,函数参数的长度与para_initial相同,所以optim可以对其执行。我认为一定有办法解决这个问题,否则为什么lm可以很好地处理动态数据框? -
你不能简单地说
par = unlist(para_initial)吗? -
矢量参数失败,因为第二个元素的长度是动态的。如果你能做到这一点,你能给出一个代码示例吗? @HansW。
标签: r