どのように整理のRプログラム?
-
13-09-2019 - |
質問
私が行するRプロジェクトの複雑さに、私のスクリプトを迅速に長、混乱している。
そのう実践できる採用と自分のコードは常に足りないと感じるほどです。まっていて、スゴく楽しかったようなもの
- 配置の機能のソースファイル
- 時には休憩ものを他のソースファイル
- 何にあるべきマスターファイル
- 機能を利用して組織単位(かということの価値があるとRが困難であるというアクセスグローバル状態)
- インデントラインの休憩です。
- 扱う{?
- けい)}月1又は2です。
基本的には、ご経験則を組織の大型Rのスクリプト?
解決
標準の答えは、使用パッケージを参照してください、 文R拡張 マニュアル"などの異なるチュートリアル。
す
- 準に自動的な方法をコードする話題
- 強く奨励する書ヘルプファイル、あると考えまインターフェイスについて
- 多くのチェ介
R CMD check
- チャンスに追加回帰試験
- などの手段として名前空間
ンショット source()
以上のコードの作品も短いスニペット.あとはパッケージにもない場合は計画を公表することとされてき内部のパッケージ内のリポジトリ
として、どのように編集"を選択することにより、一部の R Internals マニュアルに優れた R符号化規格 項6.れを使うデフォルト Emacs'ESSモード.
更新2008年-Aug-13: デイヴィッド-スミスかbloggedの Google Rスタイルガイド.
他のヒント
私は自分のファイルに異なる機能を置くのが好きです。
しかし、私はRのパッケージシステムが好きではありません。それは使用することがむしろ難しいます。
私は(他のすべての言語は、「名前空間」と呼んでいるもの)環境内でのファイルの機能を配置し、それを添付するために、軽量な代替手段を好みます。
:たとえば、私はそうのような機能の「utilの」グループを作りましたutil = new.env()
util$bgrep = function [...]
util$timeit = function [...]
while("util" %in% search())
detach("util")
attach(util)
これは、すべてのファイル util.R のです。あなたはそれをソースする場合、あなたがutil$bgrep()
などを呼び出すことができますので、あなたは「utilの」環境を取得します。しかし、さらに、attach()
コールが、それはこれだけ直接bgrep()
と、このような作業になります。あなたは、自分の環境内のすべてのこれらの機能を入れていない場合、彼らはインタプリタのトップレベルの名前空間(ショーをls()
1)を汚染思います。
私はすべてのファイルがモジュールであるPythonのシステムをシミュレートしようとしていました。それは持っている方が良いでしょうが、これはOKらしい。
これは、あなたがプログラマだが、ここで私は、コードの論理的および物理的な単位についてどのように考えるかだ場合は特に、ほとんど明らかに聞こえるかもしれません。
これはあなたのケースであれば、私は知りませんが、私はRで働いていたとき、私はめったに心の中で大規模で複雑なプログラムから始めません。私は通常、多くの場合、機能を使用して、論理的に分離ユニットに1つのスクリプトと別々のコードで開始します。データ操作および可視化コードは(ETC、次いで上部のデータ操作、可視化)、独自の機能に入れなど、およびそのような機能は、ファイルの一つのセクションにグループ化され得ます。最終的にあなたがあなたのスクリプトを維持し、不良率を下げるためにそれより簡単にする方法について考えたい。
どのように細かい/粗い粒度のあなたの機能が異なります作ると親指の様々なルールがあります。例えば15コードの行、またはあなたの走行距離は異なりますなど、「機能は、その名前で識別された一つのタスクを実行するための責任を負わなければなりません」。 Rは、参照による呼び出しをサポートしていませんので、私は通常、それは周りのデータフレームまたは類似の構造を渡す伴う場合きめ私の機能があまりにも微細化の異なっています。私は最初のR.で出始めたときしかし、これはいくつかの愚かなパフォーマンスのミスのために過かもしれ
場合(ソースファイルやパッケージなどの大きなグループのように)自分の物理的な単位に論理ユニットを抽出するには?私は2つのケースを持っています。まず、ファイルが大きくなりすぎたと、論理的に関係のないユニット間の周りにスクロールした場合には迷惑です。第二に、私は他のプログラムで再利用できる機能を持っている場合。私は通常、別のファイルに、データ操作機能を言う、いくつかのグループ化されたユニットを配置してから始めます。私はその後、他のスクリプトからこのファイルをソースすることができます。
あなたの機能を展開するつもりなら、、そして、あなたは、パッケージについて考え始める必要があります。私は生産や様々な理由のために他者による再利用のためのRコードを展開しない(簡単に:組織文化は、他のlangauges、パフォーマンス、GPLなどの懸念を好みます)。また、私は常に洗練とソース化ファイルの私のコレクションに追加する傾向があり、私は変更を行うとき、私はむしろ、パッケージを扱うないと思います。ですから、このフロントの詳細については、ディルクのように、他のパッケージに関連する答えをチェックアウトする必要があります。
最後に、私は本当に大でそのような問題やコーディング慣行についての知恵がたくさん含まれているスティーブマッコネル完全なコードを読んで推薦するあなたの質問はR.に特に必要はないと思います。
私はダークアドバイスに同意します! IMHO、文書化されたパッケージに簡単なスクリプトから、あなたのプログラムを整理すると、書き込み用のTeX / LaTeXのにWordからの切り替えのように、Rでのプログラミングのために、です。 私は非常に便利なの作成Rパッケージを見てみることをお勧めします。フリードリヒLeischによってチュートリアルのの
私は簡潔に答え:
- 書く機能の厳を特定し、一般に十分な出力を入力;
- の使用を制限し、グローバル変数;
- 利用S3物と適当な場合には、S4オブジェクト
- の機能をパッケージが機能を呼び出しのC/Fortran.
私Rがますます使用、生産の必要性を再利用可能なコードがより大きます。だから、その通訳をより強固なります。あるRを100-300xより遅いが通常のボトルネックが集中しての周囲に数行のコードできる権限を移譲することC/C++.ていただきたいと思います間違いを委譲の強みRにデータ操作の統計分析を他の言語です。この場合のペナルティーが低い場合の預金を開発。場合の実行時間になったことは、私たちはあなたのすべての文書アセンブラ.
私はパッケージを作成する方法を把握することを意味してきたが、時間を投資していません。私のミニプロジェクトのそれぞれについて、私は「機能/」と呼ばれるフォルダに自分の低レベルの機能のすべてを維持し、私は明示的に作成し、別の名前空間にそれらを調達ます。
次のコード行は、それがすでに(添付使用して)存在しない場合、検索パスに「myfuncsを」という環境を作成し、私に.Rファイルに含まれる機能とそれを移植します「機能/」ディレクトリ(SYS.SOURCEを使用)。私は通常(低レベル関数を呼び出す)高レベル関数が呼び出されるから、「ユーザーインターフェース」のためのもの、私のメインのスクリプトの先頭にこれらの行を入れます。
if( length(grep("^myfuncs$",search()))==0 )
attach("myfuncs",pos=2)
for( f in list.files("functions","\\.r$",full=TRUE) )
sys.source(f,pos.to.env(grep("^myfuncs$",search())))
変更を行うときは、常に同じ行でそれを元に再、または
のようなものを使用することができますevalq(f <- function(x) x * 2, pos.to.env(grep("^myfuncs$",search())))
あなたが作成した環境での追加/変更を評価する。
-それは私が知っているkludgeyだが、それについてあまりにも形式的なことする必要がなくなります(うまくいけば、私は将来的にそのように移行しますが、あなたは、私はパッケージシステムを奨励行うチャンスを得る場合)。
規則を符号化するように、これは私が美学(私は彼らが好きと緩く従うが、私はRであまりにも多くの中括弧を使用していない)について見てきた唯一のものです
http://www1.maths.lth.se/help/R/RCC / の
の使用に関して他の「規則」がある<[は、FALSE =ドロップ]と - 代入演算子は、ユーザーに様々なプレゼンテーション(通常は基調講演)で提案されているように!会議が、私は([、ドロップ= FALSE]は、あなたが期待する入力の確認されていないプログラムのために有用であるが)これらのいずれかが厳しいとは思いません。
パッケージの賛成で別の人として私を数えます。私は(つまりは解放される)しなければならないとき/場合まで、manページやビネットを書く上でかなり貧弱であることを認めるだろうが、それはソース雌ジカをバンドルする本当の便利な方法になります。あなたのコードを維持することを真剣に考えてもらう場合はプラス、ディルクが起動しますポイントは、すべてのplyaに来ています。
私も同意するものとします。 package.skeleton()関数を使用して開始します。あなたのコードを再度実行することはないかもしれないと思う場合でも、それは後であなたの時間を節約することができ、より一般的なコードを作成するために、あなたのやる気を引き出すに役立つことがあります。
それが推奨されても、オペレータ -は、地球環境にアクセスするためとして、それは、<<と簡単です。
まだパッケージを作成する方法を学習していないた、私はいつも、サブスクリプトを調達することで組織しています。その書き込みのクラスに似ていますが、として関与していません。そのプログラム的にエレガントではないが、私は時間をかけて分析を構築見つけます。私は作品の大きな部分を持っていたら、私は頻繁に別のスクリプトに移動し、それがワークスペース・オブジェクトを使用しますので、それを調達します。おそらく、私はいくつかのソースからデータをインポートし、並べ替え、それらのすべてとの交点を見つける必要があります。私は、追加のスクリプトにそのセクションを置くかもしれません。あなたが他の人のために、あなたの「アプリケーション」を配布したい、またはそれは、いくつかのインタラクティブな入力を使用している場合ただし、パッケージはおそらく良いルートです。研究者として、私はほとんど私の解析コードを配布する必要がありませんが、私は多くの場合、それを補強または微調整する必要があります。
っても検索する聖杯のワークフローとRの大きます。また、昨年このパッケージと呼ばれ rsuite, は、この行動はついていないのがちょっとできる。このパッケージした明示的に開発の展開のための大きなRプロジェクトで見つけることで使用できる、小型、中型、大型サイズRす。たリンクを現実世界の事例分(下)ですが、最初について簡単に説明しての新しいパラダイムビルのRプロジェクト rsuite
.
します。私は、作成者や開発者の rsuite
.
これまでのプロジェクトを抱えていかRStudio;の目標なの作成プロジェクトまたはパッケージできます。にrsuiteを作成しまスーパー-プロジェクトまたはマスタープロジェクトを保持する標準のRプロジェクトやRパッケージすべての組み合わせが可能です。
有Rスーパー-プロジェクトだなUnix
make
管理の下位レベルの案件下;ご利用のRのスクリプトが最優先されます。について説明させてください.を作成する場合rsuiteマスタープロジェクトなのに、このフォルダ構造:
フォルダ
R
はがきプロジェクト管理のスクリプトのものに置き換わるmake
.フォルダ
packages
のフォルダーrsuite
全てを保有しているパッケージを構成するスーパー-プロジェクト.またコピーペーストなパッケージにアクセスすることはできませんからのインターネット、rsuiteを構築してしまう可能性があります。フォルダ
deployment
場所rsuite
書のすべてのバイナリパッケージが実施したもので、パッケージDESCRIPTION
ファイルです。このように、ここのものは、プロジェクトを完全再現可能accrosます。rsuite
付属のクライアントのためのすべてのシステムです。いを行っています。することができますからインストールしてaddin
のためのRStudio.rsuite
きを構築conda
設置は独自のフォルダconda
.これは環境が物理的にPythonの設置からAnacondaました。この作品とともにRSystemRequirements
, るきがすべてのPythonパッケージにしたいからcondaチャンネルしています。を作ることもできます現地リポジトリプルRパッケージのときはオフラインに強いこだわりがあったり、の構築にもなります。
まいを構築することができますのRプロジェクトとしてzipファイル共有できるようにしたいと思いました。すると、同僚のRバージョンがインストールされ.
別のオプションでは、コンテナ全体のプロジェクトUbuntuのDebianではなく、またはCentOS.なのではなく、共有、zipファイルをプロジェクトの構築、シェアの
Docker
コンテナとプロジェクトの準備を行います。.
私の実験を重ねてきたんと rsuite
宿完全再現性、なにより、パッケージが設のグローバル環境です。それは間違いであるそれはインストールするパッケージ更新のプロジェクトのほとんどの場合、停止し、特にそのパッケージの非常に特定の電話機能の一部のパラメータ。
最初に私が始めて実験したとの bookdown
電子書籍.たことがありませんでしbookdownを生き抜くには試験時間が長くなります。いかなかったのでは、変換元のbookdownプロジェクトの rsuite
枠組み今思っていた心配の更新私のグローバル環境でのプロジェクト独自のパッケージに deployment
フォルダにまとめた。
は、次のことを行った作機械学習プロジェクトでは、 rsuite
ます。マスター,協奏プロジェクトは、すべてのプロジェクトやパッケージするの管理下に。こんにはまコードを開発し、になります。
その後、私が仕事を始めたパッケージを新たに鉱山と呼ばれ rTorch
.ることによって可能となったが、大部分が rsuite
;できることができます、行きます。
One pieceアドバイスをものです。学習 rsuite
は容易ではありません。ができる新しいものづくりのRプロジェクトでは、と感じました。な失望の初の試みに続く斜面にまでです。要する高度な知識の営業システムのファイルシステム。
ることを期待したいつの日か RStudio
で作成できるように協奏のようなプロジェクト rsuite
なメニューが表示されます。できます。
リンク:
Rは、対話的に使用し、小さなスクリプトでOKですが、私は大規模なプログラムのためにそれを使用することはありません。私はプログラミングのほとんどの主流の言語を使用し、Rインターフェースでラップと思います。