He notado un comportamiento extraño en las clases de referencia R cuando intento implementar algún algoritmo de optimización. Parece que hay una magia de análisis detrás de escena involucrada en la inicialización de métodos en un particular que hace que sea difícil trabajar con funciones anónimas. Aquí hay un ejemplo que ilustra la dificultad: defino una función para optimizar (f_opt), una función que se ejecuta de manera óptima y una clase de referencia que tiene estos dos métodos. El extraño comportamiento será más clara en el códigoInicialización del método en las clases de referencia 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.
¿Soy yo, o se ve esto como un insecto a otras personas también?
¿Has visto la ayuda ("fuerza")? –
Estoy de acuerdo con Allan E. Esto parece un ejemplo clásico de evaluación (no) perezosa. –