如何在R中使用带参数的函数

use*_*193 11 r mathematical-optimization

我试图在R中使用optim函数 - 我对此没有任何问题:

funk=function(param){
  x=c(1,2,3,4,5)
  z=c(3,4,2,2,1)
  y=c(30,40,22,33,40)
  a=rep(param[1],5)
  b=param[2]
  d=param[3]
  fit=sum((y-(a+b*x+z*d))^2)
  return(fit)
}

optim(par=c(1,1,1),fn=funk)
Run Code Online (Sandbox Code Playgroud) #

但是一旦我不想将我的数据(x,y,z)硬编码到函数中我就会遇到问题.当函数输入不仅仅是要优化的参数时,如何优化函数优化?理想情况下,我会传递xx,zz,yy的值然后优化,然后移动到xx,zz,yy的不同值并接下来优化该情况.

xx=c(1,2,3,4,5)
zz=c(3,4,2,2,1)
yy=c(30,40,22,33,40)

funk=function(param,x,y,z){
  a=rep(param[1],5)
  b=param[2]
  d=param[3]
  fit=sum((y-(a+b*x+z*d))^2)
  return(fit)
}

optim(par=c(1,1,1),fn=funk(param=c(0,0,0),x=xx,y=yy,z=zz))
Run Code Online (Sandbox Code Playgroud)

(函数(par)中的错误:找不到函数"fn"

小智 22

In optim,...用于将参数传递给fn:

xx=c(1,2,3,4,5)
zz=c(3,4,2,2,1)
yy=c(30,40,22,33,40)

funk=function(param,x,y,z){
  a=rep(param[1],5)
  b=param[2]
  d=param[3]
  fit=sum((y-(a+b*x+z*d))^2)
  return(fit)
}

optim(par=c(1,1,1), fn=funk, x=xx, y=yy, z=zz) 
$par
[1] -1.863076  5.722988  7.372296

$value
[1] 124.075

$counts
function gradient 
     180       NA 

$convergence
[1] 0

$message
NULL
Run Code Online (Sandbox Code Playgroud)

  • 请阅读帮助文件`?optimx`。它清楚地写成`...对于 optimx 将进一步的参数传递给 fn 和 gr;否则,不使用进一步的参数。` (2认同)