2012-05-08 6 views
11

私が作成しているパッケージ内の関数(ルックアップテーブル)内でデータセットを使用する必要がある場合、関数内に明示的にデータセットをロードする必要がありますか?関数内のデータ(パッケージ作成)

この関数とデータセットは両方とも私のパッケージの一部です。私はそのことを考えていないよ、いくつかのアプローチが正しいのですが

foo <- function(x){ 
    x <- data(dataset_in_question) 
} 

かである:

foo <- function(x){ 
    x <- dataset_in_question 
} 

か、これは良いです:

すると、このデータは関数内で設定することを使用する正しい方法です。 ?

+0

Mhh ...代わりに関数のapply関数を使用し、データセットの関数を使用しますが、これはおそらくこの場合のオプションではありません。 – Mikko

+0

ほとんどの場合、それはオプションです(1) 。 AFAIKでは、戻り値ではなく副作用として 'data()'を使います。実際、 'data()'の戻り値は単に実際の変数ではなくデータセットの名前です。たとえば、 'x < - data(iris)'を試して、何が起こるかを見てください。 – Andrie

+0

データセットをルックアップテーブルとしてのみ使用し、変更しない場合は、新しい同一オブジェクトを作成する必要がありますか?必要がある場合は、テーブルを関数の仮引数として追加することを検討できます( 'x = dataset_in_question')。 – BenBarnes

答えて

1

を満たすことですhttp://r-pkgs.had.co.nz/data.html#data-sysdata

Matthew Jockersは、このアプローチをsyuzhet paで使用しています。ここで〜ライン452に見られるように設定されbingデータを含むデータ・セットのckage:https://github.com/mjockers/syuzhet/blob/master/R/syuzhet.R

bingユーザーに利用可能ではなく、によって示されるように、パッケージにある:syuzhet:::bing

基本的には、コマンドdevtools::use_data(..., internal = TRUE)が設定されますそれが必要とされているすべての方法ですべて。

+0

use_dataは廃止されました – jzadra

+1

@jzadraは大したものではなく、usethis :: use_dataとして** usethis **パッケージに移されました。 –

11

はR-develの上(パッケージ開発の文脈で)このトピックについてのrecent discussionありました、多数の点は、この質問に関連しています

  1. あなたが提供する唯一のオプションはに適用される場合あなたの例R自身が(すなわち、Brian Ripley)が行うことを説明します:このアプローチは、しかし、使用してR(または現在のRのdevel)の次期バージョンで回避することができR CMDチェックで注意をスローします

    foo <- function(x){ 
        data("dataset_in_question") 
    } 
    
  2. t彼globalVariables()機能、added by John Chambers

  3. 「正しい」アプローチ(すなわち、Brian RipleyPeter Dalgaardが提唱する1)は、あなたのパッケージのLazyDataオプションを使用することです。 this section of "Writing R Extensions"を参照してください。

Btw:最初のアプローチがどのように機能するかは十分に理解できていません。 x <- dataset_in_questionはどうすればよいですか? dataset_in_questionはグローバル変数か、以前に定義されていますか?

1

は、私にとっては、NOTE no visible binding for global variable ...を取り除くために(@Henrikポイント3によってpostigを参照)DESCRIPTIONファイルにLazyData: trueに加えてget()を使用する必要がありました。私のRバージョンは3.2.3です。

foo <- function(x){ 
    get("dataset_in_question") 
} 

のでLazyDataは(data("dataset_in_question", envir = environment())を使用せずに)dataset_in_questionが直接アクセスできるようにしてget()一つは、同じようにRフォルダに.rdaファイルとして設定されたデータを配置することができますR CMD check

HTH

関連する問題