2016-04-17 8 views
0

私はCRANにリリースするために新しいRパッケージを開発しており、そのソースコード内で直接system()コマンドを呼び出すことを希望しています。例えば、私は私のRパッケージ内で直接gzipユーティリティを使用したいと思います:Rパッケージ開発のベストプラクティス:system()コマンドを使用していますか?

write.csv(mydat, "mydat.csv") 
system("gzip mydat.csv", wait=FALSE) 

さらに重要なのは、私は直接私のRパッケージ内の他の既存のコマンドラインユーティリティを活用したいと思います。そして、コマンドラインユーティリティで、私はR.

に書き換えること些細なではありません、実際の大規模なコマンドラインのソフトウェアプログラムを意味するので、私の質問は:(外部の使用を指定するためのいくつかのベストプラクティスは何ではありませんR)の開発中のコマンドラインライブラリ

は例えば、RパッケージDESCRIPTIONファイル内ImportsDependsフィールドは、あなたのRパッケージ内に既存のRライブラリの使用を指定するための唯一の良いです。パッケージマネージャ(例:brew)を使用して、既存の非Rコマンドラインライブラリを手作業でインストールする必要があります。これはR Studio内の自己完結型作業のベストプラクティスに反しますIDE。さらに、このようなラウンドアバウトアプローチは、コマンドライン実行可能ファイルへの完全なパスの一致、R Studio IDEとの調整などが難しいため、再現性のある方法で動作するという保証はありません。

同様に、 https://cran.r-project.org/web/packages/ssh.utils/index.htmlなどのツールは、R環境内での基本的なコマンドラインのニーズにのみ対応するため、大きなコマンドラインソフトウェアプログラムを使用するニーズには適用されません。

参考:私が開発しているRパッケージは、個人用ではありません。それはCRANへの一般公開を意図しており、したがって、彼らのチェックに従うべきです。しかし、私は私がしたい、特にR.

+1

パッケージの 'DESCRIPTION'ファイルに、必要な依存関係を持つ' SystemRequirements'セクションを指定することができます。システムにそれがあるかどうかをテストするconfigureスクリプトを書くべきです。しかし、「システム」と呼ぶのは良い習慣だとは思わない。外部ライブラリに依存している場合は、Rから直接呼び出すことができるように、よりクリーンな方法でラップする必要があります。 – nicola

+0

スポットがあります。そして、我々が必要とする(そして提供する)ツールの存在を保証する 'x13バイナリ'で何をするのか。 –

+0

@nicolaも​​しあなたが外部の図書館に頼っているのであれば、Rから直接呼び出すことができるように、外部の図書館に頼っているなら、それを包むことがよりクリーンな方法でなければなりません。 ... 'system()'を呼び出さずに、既存のライブラリのコードを(Rライブラリではないと仮定して)どのようにラップするのですか? – warship

答えて

0

を書き換えするのは簡単ではありません、実際の大規模なコマンドラインのソフトウェアプログラムを活用してのコンテキストで、system()コマンドの使用に関するCRANから任意の仕様を見つけることができませんでした私のRパッケージ内で直接gzipユーティリティを使用してください。

これはコードの匂いです。 あなたのパッケージは、そのようなプログラムが存在する場合は、configure(または同様の)手段を使用して判断する必要があります。だからどうして気になる?この例では、と私のボックスに:

[email protected]:~$ grep GZIP /etc/R/Renviron 
R_GZIPCMD=${R_GZIPCMD-'/bin/gzip -n'} 
[email protected]:~$ 

あなたは、このようなsaveRDS()、その上gzcon()gzfile()機能やなど、ほとんどのファイル保存コマンドを経由して、それへのアクセス権を持っています。私のthis older answerを参照してください。

本当に外部プログラムの場合は、system()に頼ることができます。私たちの基礎となるx13binaryバイナリパッケージに依存するChristophのseasonalパッケージを参照してください。

+0

'x13binary'パッケージはRパッケージです。 Rエコシステムで利用できないコマンドラインソフトウェアパッケージ(必ずしもRで書かれているわけではない)を明示しています(R Studio IDEなど)。 – warship

+0

詳細に少し注意を払ってください。 [x13binary](https://cloud.r-project.org/web/packages/x13binary/index.html)_package_は、Rからアクセスするオペレーティングシステムとプラットフォームにかかわらず、(カスタムインストーラコードを使用して)_binary_を ' system() '---あなたがここで求めているものですが、Rラッパーコードを使って_carefully_と_portably_しています。これはすべてあなたが現在考えているより少し難しいかもしれません。 –

関連する問題