2016-06-26 4 views
0

この問題があります。パッケージの作成時にグローバル変数を定義する

:私は、私が構築し、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 
} 

この

であるRの名称「mypackagefunction」との新しいパッケージを作成しています

mypackagefunction:バインディングが見えない '< < - ' 'GDATA'

への代入しかし、私は私のパッケージを実行します。

私はこれが

> mypackagefunction() 
> gdata 
NULL 

私は私のパッケージをチェックするとき、どのように私はこのNOTEまたは警告を削除することができますか?結果とパッケージにあるその変数を呼び出して使用することができます

mypackagefunction() 

またはグローバル変数を定義する別の方法?あなたには、いくつかの特定のRオブジェクトになりたい場合 -

+0

グローバル変数をパッケージに定義しないでください。 CRANはおそらくそれを受け入れません。 –

+3

それは[CRANリポジトリポリシー](https://cran.r-project.org/web/packages/policies.html)の*ソースパッケージの最後のセクションにあります*読みます*パッケージは地球環境を変更すべきではありません(ユーザーのワークスペース)。* –

答えて

3

あるパッケージ内のデータを含めるための標準的な方法がありますassign('prev_id', id, envir = .GlobalEnv)のようなものですパッケージのユーザーが利用できる場合は、これを行う必要があります。データはデータフレームと行列に限定されず、任意のRオブジェクトを含めることができます。

一方、関数が呼び出されるたびに地球環境を変更することを意図していた場合は、間違っています。 Rの関数型プログラミングのパラダイムでは、関数は、ユーザーがグローバル環境に割り当てることができるオブジェクトを返します。オブジェクトは地球環境に「出現する」だけではなく、ユーザが(a)それらを探すことを知っていて、(b)保存したい同じ名前のオブジェクトを持たないことをプログラマが期待している彼らはちょうど上書きされた)。このようなコードを記述することも可能です(ご質問のように<<-を使用するか、@ abhiieorの回答のようにassignを明示的に呼び出してください)が、CRANポリシーに違反するため、CRANには受け入れられません。

1

グローバル変数を定義する別の方法は、idが譲受人変数であるか、いくつかの値とprev_idがグローバル変数

関連する問題