Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何通过调用R中另一个函数的优化函数传递常量参数?_R_Function_Optimization_Parameter Passing - Fatal编程技术网

如何通过调用R中另一个函数的优化函数传递常量参数?

如何通过调用R中另一个函数的优化函数传递常量参数?,r,function,optimization,parameter-passing,R,Function,Optimization,Parameter Passing,我试图最小化一个在概念上与此类似的函数: minim<-function(a,b,state){ if(state=="TRUE"){out<-2*a^2+b}else{out<-2*a^3-b} return(out) } 我得到的错误是: Error in fn(par, ...) : unused argument (state = "TRUE") GenSA应该能够接受它将传递给被调用函数的附加参数。由于某种原因,state=“TRUE”似乎没有被传递到minim。

我试图最小化一个在概念上与此类似的函数:

minim<-function(a,b,state){
if(state=="TRUE"){out<-2*a^2+b}else{out<-2*a^3-b}
return(out) }
我得到的错误是:

Error in fn(par, ...) : unused argument (state = "TRUE")

GenSA
应该能够接受它将传递给被调用函数的附加参数。由于某种原因,
state=“TRUE”
似乎没有被传递到
minim
。我是不是编错了?我没有找到一个使用附加参数检查我的R语法的
GenSA
use示例

您正在优化函数
函数(params)minim(params[1],params[2])
。此函数不包含参数
状态
。您可以这样修复此问题:

minim <- function(a, b, state) {
  if (state) {
    out <- 2 * a^2 + b
  } else {
    out<-2 * a^3 - b
  }
  return(out)
}

fn = function(params, state) minim(params[1],params[2], state)

minim_state_TRUE_fit<-GenSA(par=params,fn = fn, 
                            lower=lower_limits, upper=upper_limits, 
                            control=list(max.time=100), state = TRUE)

minim如果要将命名参数传递给函数,则需要提供正式参数来接受它们,因此在
fn
参数定义和
minim
调用中输入“点”:

minim_state_TRUE_fit<-GenSA(par=params,fn=function(params, ...) {     
                                                minim(params[1],params[2], ...) }, 
                            lower=lower_limits, upper=upper_limits, 
                            control=list(max.time=100), state="TRUE")

minim\u state\u TRUE\u fitDo注意,如果调用构造正确,那么将state设置为“TRUE”将意味着它应该通过
stat==“TRUE”的测试,这一点很好。我已经在示例代码中修复了这个错误。
minim_state_TRUE_fit<-GenSA(par=params,fn=function(params, ...) {     
                                                minim(params[1],params[2], ...) }, 
                            lower=lower_limits, upper=upper_limits, 
                            control=list(max.time=100), state="TRUE")