いくつかの最適化アルゴリズムを実装しようとすると、R参照クラスでいくつかの奇妙な振る舞いに気付きました。匿名の関数で作業することを難しくする、特定のメソッドの初期化に関わる舞台裏での解析の魔法があるようです。 難易度を示す例は次のとおりです。最適化する関数(f_opt)と、最適化を実行する関数と、これらの2つをメソッドとして持つ参照クラスを定義します。奇妙な振る舞いは、コードR参照クラスのメソッド初期化
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.
に明確になり、それは私だけですか、これはあまりにも他の人へのバグのように見えますか? R-develの中
あなたは助力(「力」)を見ましたか? –
私はAllan E.に同意します。これは、怠け者(非)評価の古典的な例のようです。 –