일부 최적화 알고리즘을 구현할 때 R 참조 클래스에서 이상한 동작을 발견했습니다. 익명의 함수로 작업하는 것을 어렵게 만드는 특수한 메서드를 초기화하는 것과 관련된 몇 가지 비하인드 구문 분석 마법이있는 것으로 보입니다. 다음은 난이도를 보여주는 예입니다. 최적화 할 함수 (f_opt), 최적화를 실행하는 함수 및이 두 가지를 메서드로 가지는 참조 클래스를 정의합니다. 코드에서 이상한 행동이 더 명확 해집니다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.에 동의합니다. 이것은 게으른 (비) 평가의 전형적인 예입니다. –