11

最適化アルゴリズムを実装しようとすると、R 参照クラスで奇妙な動作が発生することに気付きました。特定のメソッドの初期化に関与する舞台裏の解析マジックがいくつかあるようで、匿名関数の操作が困難になります。難しさを示す例を次に示します。最適化する関数 (f_opt)、最適化を実行する関数、およびこれら 2 つをメソッドとして持つ参照クラスを定義します。奇妙な動作はコードでより明確になります

f_opt <- function(x) (t(x)%*%x)

do_optim_opt <- function(x) optim(x,f)
do_optim2_opt <- function(x)
  {
   f(x) #Pointless extra evaluation
   optim(x,f)
  }

optClass <- setRefClass("optClass",methods=list(do_optim=do_optim_opt,
                                 do_optim2=do_optim2_opt,
                                 f=f_opt))
oc <- optClass$new()
oc$do_optim(rep(0,2)) #Doesn't work: Error in function (par)  : object 'f' not found
oc$do_optim2(rep(0,2)) #Works. 
oc$do_optim(rep(0,2)) #Parsing magic has presumably happened, and now this works too. 

それは私だけですか、それともこれは他の人にもバグのように見えますか?

4

1 に答える 1

6

This post in R-devel seems relevant, with workaround

do_optim_opt <- function(x, f) optim(x, .self$f)

Seems worth a post to R-devel.

于 2011-09-07T13:33:03.250 に答える