15

通常、同じ機能設定を使用します。基本的に関数のラッパーである新しいオブジェクトをパスに配置する以外に、デフォルトの引数を設定する方法があるかどうか疑問に思っています。例えば:

paste()sep引数がスペースに設定されているため、何度=" "も書くのにうんざり,sep=""しています。関数を選択したデフォルトに「一時的に」置き換える方法はありますか?

paste(...,sep="") 

パッケージングでこれを達成できますか?一部のパッケージでは、グローバル環境で同じ名前の関数を強制的にマスクすることがあります。

理想的には、プロジェクトごとに(load.rまたは他のそのようなワークフローの開始点で)設定できるものが欲しい

4

2 に答える 2

18

個人的には、一般的に使用される関数、特にベース R 関数のデフォルトの動作を変更することをためらっています1 つには、再定義された関数を使用するスクリプトまたはコード スニペットの移植性がすぐに低下します。さらに悪いことに、あなたのスクリプトを読んでいる他の R ユーザーは、(a) よく知られた言語要素に対するあなたの個人的な意味を認識していないか、(b) 関数に対する自分の期待を再配線しなければならないことに不満を感じている可能性があります。私にとっては、同じシンボルに異なる設定で異なる意味を与えることは、追加の精神的負担のようにも感じます.

より良い解決策は、好みのデフォルトを実装する同様の名前の関数を作成することだと思います。わずかに変更された名前は、これが使い慣れた基本関数ではないことを効果的に示し、多くのまたは余分な入力の負担をかけません。良い例は、パッケージに含まれているpaste0()およびcat0()関数です。(明らかに、のデフォルト設定gsubfnに (頻繁に) 悩まされているのは、あなたと私だけではありません!):paste()sep

library(gsubfn)

paste0
# function (..., sep = "") 
# paste(..., sep = sep)
# <environment: namespace:gsubfn>

cat0
# function (..., sep = "") 
# cat(..., sep = sep)
# <environment: namespace:gsubfn>

次に、これらの関数の多くをテキスト ファイルに集めて、スクリプトの早い段階でソースにするか、(より良い) それらをパッケージ化して への呼び出しを介してロードすることができますlibrary()

于 2012-01-31T04:22:18.790 に答える
12

そのために使用されるDefaultsパッケージ。2014年に引退。

于 2012-01-31T03:27:06.127 に答える