Rの名前空間メカニズムは、ユーザが見ることができる機能を1つ〜export
に許可します。さらに、他のパッケージの機能をimport
にすることができます。輸出の利益は明らかですが、私は輸入の利益を理解する上でより多くの問題があります。Rの名前空間でのインポートの利点は何ですか?
1つの利点は、パッケージを添付してメモリを節約することなく他のパッケージの機能を使用できることです。これはセクション1.6.4 in the writing R extensions manualに例示されている。
ただし、インポート機能には他にも利点があります。特に、section 1.6.6 (that deals with S4 classes)はstats4パッケージのnamespace
を示す:
export(mle)
importFrom("graphics", plot)
importFrom("stats", optim, qchisq)
## For these, we define methods or (AIC, BIC, nobs) an implicit generic:
importFrom("stats", AIC, BIC, coef, confint, logLik, nobs, profile,
update, vcov)
exportClasses(mle, profile.mle, summary.mle)
## All methods for imported generics:
exportMethods(coef, confint, logLik, plot, profile, summary, show, update, vcov)
## implicit generics which do not have any methods here
export(AIC, BIC, nobs)
ここS4クラスもジェネリックでもないインポートされた機能は、(それがthat section例に記載されているように、同様にインポートを使用することが理にかなっている)が存在しますRが起動すると自動的にロードされるgraphics
パッケージのplot
のような機能を実行します。
私の質問は、plot
,optim
またはqchisq
のような関数をインポートする利点は何ですか?
つまり、そのような関数をインポートすることは、その関数を汎用的に宣伝したい場合にのみ意味があります。 (検索パスに 'plot'と呼ばれる他の関数がないと仮定したい場合) – Henrik
パッケージが使用する関数(常に利用可能なbase以外のパッケージから)をインポートすることは常に理にかなっています。 3番目のパッケージは 'plot = function(...) 'という関数を定義しています。ユーザーは検索パスを制御できません。 –
しかし、私が常に '::'演算子を使って関数を呼び出すと(例えば 'plot()'の代わりに常に 'graphics :: plot()')、パッケージがすでに接続されている場合はインポートの利点はありますか? – Henrik