2015-10-09 5 views
5

パッケージdata.tableに依存するRパッケージを作る必要があります。しかし、私はこのようなパッケージの次の一つとしての機能を行うならばdata.tableに依存するRでパッケージを作る

randomdt <- function(){ 
    dt <- data.table(random = rnorm(10)) 
    dt[dt$random > 0] 
} 

機能[ないdata.tableためdata.frameのための方法、したがって、エラーを使用します

Error in `[.data.frame`(x, i) : undefined columns selected 

が表示されます。通常、これはget('[.data.table')または同様の方法を使用して解決されますが(が最も簡単です)、動作しないようです。結局のところ、[は基本的な機能であり、私はそれがどのように機能するのかわかりません。

私のパッケージからdata.table [関数を呼び出すにはどうすればよいですか?

+0

おそらく、あなたのパッケージがロードされたときに 'data.table'がロードされていることを確認する必要があります。 – Jaap

+2

'Description'ファイルに' Depends:data.table'を追加します。 – Soheil

+4

[よくある質問6.9](https://cran.r-project.org/web/packages/data.table/vignettes/datatable-faq.pdf)を読んでいますか? – Arun

答えて

5

MichaelChiricoおよびコメントArunおよびSoheilからのフィードバックに基づいて更新されました。

大まかに言えば、2つのアプローチが考えられます。最初はパッケージ自体への依存関係を構築していますが、2番目にはdata.tableの存在をテストするRコードの行が含まれています(見つからない場合は自動的にインストールすることも可能です)。

data.tableFAQは、特に6.9でこれに対処し、そしてあなたがdata.tableが適切であなたのパッケージによってロードされていることを確実にすることができると述べている:

どちらか私は)に依存してdata.table含まれます:あなたの説明の場をまたはii)DESCRIPTIONファイルのImports:フィールドにdata.tableを含め、NAMESPACEファイルにimport(data.table)を挿入します。

コメントに記載されているように、これは多数のパッケージに共通するRの動作です。

別の方法として、コードの一部として必要なパッケージをテストしてインポートする特定のコード行を作成する方法があります。これは、上記のオプションを使用する優雅さを考えれば理想的な解決策ではなく、私が主張することです。しかし、それは技術的に可能です。

これを行う簡単な方法は、requireまたはlibraryのいずれかを使用して、data.tableの存在をチェックし、接続できなかった場合はエラーがスローされます。 install.packagesを実行して、読み込みに失敗した場合に必要なものをインストールするための簡単な条件文のセットを使用することもできます。 (knitr名声の)

Yihui謝libraryrequirehereの違いについての素晴らしい記事を持っており、ちょうどパッケージは今後のコードのために必要不可欠である場合にlibraryを使用するための強力なケースになります。

+1

なぜdownvote?答えを改善する方法についてのコメント、多分? – TARehman

+0

@MichaelChirico公正な提案があります。私はこれを拡張し、ArunとSoheilが言及したいくつかの項目を関連づける努力をしました。追加の提案がある場合は、さらに改訂していただきます。 – TARehman

関連する問題