J'ai remarqué un comportement étrange dans les classes de référence R lors de la tentative d'implémentation d'un algorithme d'optimisation. Il semble y avoir quelques magies d'analyse en coulisses impliquées dans l'initialisation des méthodes dans un particulier, ce qui rend difficile de travailler avec des fonctions anonymes. Voici un exemple qui illustre la difficulté: Je définis une fonction à optimiser (f_opt), une fonction qui exécute optim, et une classe de référence qui a ces deux méthodes. Le comportement étrange sera plus clair dans le codeInitialisation de méthodes dans les classes de référence 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.
Est-ce juste moi, ou est-ce que ça ressemble un bug à d'autres personnes aussi?
Avez-vous regardé l'aide ("force")? –
Je suis d'accord avec Allan E. Cela ressemble à un exemple classique de paresseux (non) évaluation. –