如何使被调用函数的调用函数变量(不作为函数参数)

时间:2017-08-02 10:55:24

标签: r

R中的优化通常通过使用一个函数返回在候选参数空间的某个点评估的目标函数值来实现,例如

f=function(x) x[1]**2+x[2]**2

然后通常由

找到最佳向量x
x_opt=somepkg::optim(f,xstart,params) #xstart may be the starting point

出于好的理由,大多数软件包允许f要优化其他参数params (使用省略号{{1}在优化函数...中。例如,请参阅somepkg::optim。 所以,如果我有

DEOptim

我会打电话给

f=function(x,a) x[1]**2+x[2]**2+a*x[1]

现在,我遇到了一个包(x_opt=somepkg::optim(f,xstart,a=1) ),它使用省略号将参数传递给依赖包(rBayesianOptimization)的某些功能,但不是 { {1}}。因此,问题就出现了如何让GPfit知道f ...

下面是一个最小的例子,展示了我如何绕过缺失的省略号。但是,我觉得我的方法可能会引入一些我尚未意识到的严重陷阱。请指点我们如何正确完成这项工作。

a

1 个答案:

答案 0 :(得分:1)

您可以将additioanl参数包装在"构造函数"像这样:

getTestFun <- function(a) {

  Test_Fun <- function(x) {
   list(Score = exp(-a*(x - 2)^2) + exp(-(x - 6)^2/10) + 1/ (x^2 + 1),
   Pred = 0)
  }

  Test_Fun

}

然后你可以这样做:

Do_Opt=function () {

  a=2
  Test_Fun <- getTestFun(a)

  OPT_Res <- BayesianOptimization(Test_Fun,
                                  bounds = list(x = c(1, 3)),
                                  init_points = 2, n_iter = 1,
                                  acq = "ucb", kappa = 2.576, eps = 0.0,
                                  verbose = FALSE)
}