2016-09-12 12 views
0

모두가 동일한 개인 변수에 액세스하는 R 함수 집합을 어떻게 만듭니 까?개인 변수로 R 함수를 만드는 방법은 무엇입니까?

writeSetting(key,value) 같은 기능을 모두 동일한 숨겨진 목록에서 작동하도록 만들려한다고 가정 해 봅시다 settings. 내가

local({ 
    settings <- list() 
    readSetting <<- function (key) settings[[key]] 
    writeSetting <<- function (key, value) settings[[key]] = value 
}) 
다음

... readSettingwriteSetting ... 그래서처럼하려고하면 local 전화의 외부 표시되지 않습니다. 내가 그들이 볼 수 있도록하려면, 내가 먼저 local 전화 외부

readSetting <- writeSetting <- NULL 

을 지정해야합니다. 변수가 공개 된 두 가지 다른 방법으로 말하면 내 코드가 DRY가 아니기 때문에 더 나은 방법이 있어야합니다.

(이 작품의 맥락은 내가 R 패키지를 개발하고있어,이 코드는 source를 통해 주요 파일로로드 보조 파일에있을 것입니다.)이 질문은 How to limit the scope of the variables used in a script?하지만 관련이

거기에 대한 대답은 내 문제를 해결하지 못합니다.

+0

''knitr'이 옵션 ('base :: options'과 비슷한 것 같습니다)을 예제로 볼 수 있습니다. – Gregor

+0

어쩌면 나는 조금 느리다. @ 그레고르.하지만 연결을 보는데 문제가있다. – Nathan

+0

내가 생각할 수있는 유일한 패키지는 글로벌 옵션이 자주 수정되는 것입니다. 'knitr'가'opts_chunk'를 내보내지 않으면 청크 옵션을 모두 보이지 않게 할 수 있습니다 (다소). – Gregor

답변

1

당신은 그 사용 R6Class 패키지 다음과 같은 매우 거친 코드처럼 뭔가를해야만 시뮬레이션 할 수 있습니다 :

Privates <- R6Class("Privates", 
       public=list(
        readSetting = function(key) { 
         private$settings[[key]] 
        }, 
        writeSetting = function(key,value) { 
         private$settings[[key]] <<- value 
        } 
        ), 
       private=list(
        settings = list() 
       ) 
) 
a <- Privates$new() 
a$writeSetting("a",4) 
a$readSetting("a") 

가 직접 a$setting 작동하지 않을 설정 O를 읽고.

+0

좋아 보인다. 기본 R 함수 중 일부가 수행하는 환경을 사용할 수도 있으며, 그 중 일부는 명시 적으로 환경을 사용할 수도 있습니다. 나는'stepfun'과'ecdf'에 대해 생각하고 있는데, R6Class를 내보낼 수 있어야하므로이 방법이 더 강력하다고 생각합니다. –

+0

그게 내가하려는 일의 핵심에 부딪치게 보이지만,이 한 가지를 위해 전체 클래스 패키지를 가져오고 싶지는 않습니다. – Nathan

+0

모두는 당신이 달성하기를 원하는 것에 달려 있으며 왜 또는 왜 당신은 정말로 그것을 개인적으로 필요로합니까? – kwicher