2011-09-07 5 views
11

일부 최적화 알고리즘을 구현할 때 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

+1

도움을 보았습니까 ("강제")? –

+0

Allan E.에 동의합니다. 이것은 게으른 (비) 평가의 전형적인 예입니다. –

답변

6

This 포스트는

do_optim_opt <- function(x, f) optim(x, .self$f) 

는 R-(STABLE)에 게시 가치가 같다 해결과 관련 보인다.

+0

그걸 고쳤습니다. 고마워요! – sbarthelme