2016-06-26 2 views
0

이 문제가 있습니다.패키지를 만들 때 전역 변수 정의

: 나는 그 부분 코드 R에 대한 이름이 "mypackagefunction"와 새 패키지를 만드는 오전하는 것은 그래서, 구축 및 R Studio에서 다시로드 한 후 확인이 단계에서 나는이 경고가이

mypackagefunction<-function(){ 

    ##This is the constructor of my package 
    ##1st step: define variables 

    gdata <<- NULL 

    #... 
    #below of this, there are more functions and code 
} 

입니다

mypackagefunction는 : 눈에 보이는 '는 < < -'바인딩을하지 할당에 'GDATA'

그러나 나는 내 패키지를 실행하면

mypackagefunction() 

내 패키지를 확인할 때 내가 어떻게이주의 또는 경고를 제거 할 수 있습니다이 함께 패키지로입니다 변수가

> mypackagefunction() 
> gdata 
NULL 

결과 전화를 사용할 수 있습니까? 또는 전역 변수를 정의하는 다른 방법?

+0

패키지에 전역 변수를 정의하면 안됩니다. CRAN은 아마도 그것을 받아들이지 않을 것입니다. –

+3

[CRAN 저장소 정책] (https://cran.r-project.org/web/packages/policies.html)의 * 소스 패키지 * 마지막 부분에서 설명합니다. * 패키지는 전역 환경을 수정해서는 안됩니다. (사용자의 작업 영역). * –

답변

3

패키지에 데이터를 포함하는 표준 방법이 있습니다 - 당신이 원하는 경우 일부 특정 R 객체로 패키지 사용자가 사용할 수 있도록해야합니다. 데이터는 데이터 프레임 및 행렬에만 국한되지 않으며 모든 R 객체가 포함될 수 있습니다.

반면에, 함수가 호출 될 때마다 글로벌 환경을 수정하려는 의도가 있다면, 잘못하고있는 것입니다. R의 함수 프로그래밍 패러다임에서 함수는 사용자가 전역 환경에 할당 할 수있는 객체를 반환합니다. 객체는 지구 환경에서 단지 "나타나지"않는다. 프로그래머는 사용자가 (a) 그들을 찾는다는 것을 알기를 바란다. (b) 유지하고자하는 같은 이름의 객체를 가지지 않기를 바란다. 그들은 단지 덮어 썼다). 이 같은 코드를 작성하는 것이 가능합니다 (질문 에서처럼 <<-을 사용하거나 @ abhiieor의 답변에서 명시 적으로 assign을 호출하는 것). 그러나 CRAN 정책을 위반하기 때문에 CRAN에 허용되지 않을 것입니다.

1

id가 양수인 변수 또는 일부 값과 prev_id입니다 assign('prev_id', id, envir = .GlobalEnv) 같은 전역 변수를하다 전역 변수를 정의하는 또 다른 방법입니다