私はパッケージの書き方を理解するつもりでしたが、時間を費やしていません。ミニプロジェクトごとに、すべての低レベル関数を「functions /」というフォルダーに保持し、明示的に作成した別の名前空間にそれらをソースします。
次のコード行は、検索パスに「myfuncs」という名前の環境がまだ存在しない場合は作成し(attachを使用)、「functions/」ディレクトリの.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())))
作成した環境での追加/変更を評価します。
それは私が知っている厄介なことですが、それについてあまり正式である必要はありません(しかし、機会があれば、パッケージシステムを奨励します-将来的にはそのように移行することを願っています)。
コーディング規約に関しては、これが美学に関して私が見た唯一のことです(私はそれらが好きで、大まかに従いますが、Rではあまり多くの中括弧を使用しません):
http://www1.maths.lth.se/help/R/RCC/
useRでのさまざまなプレゼンテーション(通常は基調講演)で提案された代入演算子として、[、drop = FALSE]と<-の使用に関する他の「規則」があります!会議ですが、これらのいずれも厳密ではないと思います(ただし、[、drop = FALSE]は、期待する入力がわからないプログラムに役立ちます)。