Ответ 1
Это сообщение в R-devel кажется релевантным, с обходным решением
do_optim_opt <- function(x, f) optim(x, .self$f)
Кажется, стоит сообщение для R-devel.
Я заметил некоторое странное поведение в ссылочных классах R при попытке реализовать некоторый алгоритм оптимизации. Кажется, есть некоторые закулисные магии разбора, связанные с инициализацией методов в частности, что затрудняет работу с анонимными функциями. Вот пример, иллюстрирующий трудность: я определяю функцию для оптимизации (f_opt), функцию, которая работает на ней оптимизирована, и ссылочный класс, который имеет эти два метода. Нечетное поведение будет более четким в коде
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 кажется релевантным, с обходным решением
do_optim_opt <- function(x, f) optim(x, .self$f)
Кажется, стоит сообщение для R-devel.