2011-12-29 3 views
2

私はほとんど技術的ではないユーザーの小さなグループの中で作業しており、グループ内にRスクリプトを配布したいと考えています。これは、シバン行で 'RScript'を使い、いくつかのコマンドライン引数をとり、グラフィックファイルとテキストを出力として生成します。外部パッケージを使用するRスクリプトを配布する

スクリプトが使用する外部パッケージ(引数を解析するためのoptparseなど)がユーザーに使用可能であることを保証する方法があるかどうかは疑問です。グループ内の全員が指示に従ってコマンドラインからプログラムを呼び出すことができますが、Rを起動して依存関係をダウンロードしてインストールするように要求することはあまりにも多いかもしれません。私はpy2exeやpy2appをPythonの似たような状況に使用しましたが、Rスクリプトを配布するための同等の方法やベストプラクティスがあるかどうかは疑問です。

+3

「ライブラリ」と言うとき、あなたは「パッケージ」を意味しますか? – Spacedman

+0

はい。あいまいな用語には申し訳ありません。 – primelens

+0

私は用語を修正しました... – Iterator

答えて

9

パッケージを作成し、依存関係を「依存」として宣言します。これはうまく動作し、OS間で幅広くテストされています。

また、パッケージをローカルリポジトリに配置して、更新を簡単に、場合によっては自動的に行うこともできます。私はかつて自社のスタートアップコードで新しいバージョンがローカルリポジトリで利用可能かどうかをチェックした社内パッケージを書いていました。

7

Dirkはベストプラクティスのソリューション(依存関係のあるパッケージ)を提供していますが、次にベストプラクティスの解決策はおそらくrequire(foo)を使用してパッケージが存在するかどうかをテストし、あなたは、ユーザーが質問されていないので、install.packagesは中CRANのレポを指定する、とも警告を停止する必要が上のいくつかのオプションを使用する場合があります

if(require(foo)){ 
# foo loaded okay 
cat("we got foo\n") 
}else{ 
cat("uh oh, no foo. let's get it\n") 
install.packages("foo") 
} 

:ような何か。

+0

良い答え。また、Dirkの提案とともに、ローカルのリポジトリ/サーバを指定できるので、CRANにアクセスする必要はありません。ローカルサーバーが使用されている場合、管理者は、内部的に派生したパッケージまたは一連のパッケージの自動更新を指定して、インストール全体の一貫性を保証することができます。パッケージのバージョンが異なると、クラッシュが発生した場合や、すべての動作をテストする方法が不十分な場合には、悪夢になる可能性があります。 – Iterator