我可以将更多参数传递给R中的optimize()函数

pat*_*pat 5 optimization r

优化函数仅用于处理我理解的一个函数参数.但有时函数可能依赖于变量和参数的不同输入范围.

例如:

x.r<-rnorm(100)
y<-function(x,p) -x^2+p*1/exp(x^3)
optimize(y,upper=range(x.r)[2],lower=range(x.r)[1])
Run Code Online (Sandbox Code Playgroud)

xr传递给y的域可以从样本变为样本.而不是使用泛型x,我希望能够从许多xr值的域中绘制来运行y.有没有办法修改优化函数,以便我可以传递y,函数和x它的域变量以及优化参数p?

有了上面我得到一个错误:

> optimize(y,upper=range(x.r)[2],lower=range(x.r)[1])
Error in p * 1 : 'p' is missing
Run Code Online (Sandbox Code Playgroud)

编辑:以下建议(这是有道理的......但是)我试过了.

x.r<-rnorm(100)
p<-seq(-5,5,1)
y<-function(x,p) -x^2+p*1/exp(x^3)
optimize(y,upper=range(x.r)[2],lower=range(x.r)[1],p)
Run Code Online (Sandbox Code Playgroud)

结果是:p*1出错:缺少'p'

也,

> optimize(y,upper=range(x.r)[2],lower=range(x.r)[1],p,x.r)
Error in optimize(y, upper = range(x.r)[2], lower = range(x.r)[1], p,  : 
  invalid function value in 'optimize'
Run Code Online (Sandbox Code Playgroud)

还有其他想法吗?

编辑2:下面的评论循环可以工作,但似乎是一个奇怪的方法来接近它.我不确定它是否也将xr域考虑在内.

x.r<-rnorm(100)
p<-seq(-5,5,1)
y<-function(p=p,x=x.r) -x^2+p*1/exp(x^3)
for(v in p){
print(optimize(y,upper=range(p)[2],lower=range(p)[1],p=v))}

> for(v in p){
+ print(optimize(y,upper=range(p)[2],lower=range(p)[1],p=v))}
$minimum
[1] -4.999944

$objective
[1] -9.637547e+54

$minimum
[1] -4.999944

$objective
...
Run Code Online (Sandbox Code Playgroud)

ags*_*udy 3

我打电话optimise过来p

x.r <- rnorm(100)
p   <- seq(-5,5,1)
y<-function(x,p) -x^2+ p/exp(x^3)
ll <- lapply(p,function(i)
         optimize(y,upper=range(x.r)[2],lower=range(x.r)[1],p=i))

ll[[which.min(sapply(ll,'[[','minimum'))]]

$minimum
[1] -2.14628

$objective
[1] -98357.67
Run Code Online (Sandbox Code Playgroud)

当然如果maximum = TRUE最后变成

ll[[which.max(sapply(ll,'[[','maximum'))]]
Run Code Online (Sandbox Code Playgroud)