R的命名空間機制允許使用一個到export
函數,這些函數對用戶是可見的。此外,它允許從其他軟件包的功能import
。鑑於出口的利益是顯而易見的,我對理解進口的好處有更多的問題。在R中的命名空間導入有什麼好處?
一個好處似乎是,人們可以使用其他軟件包中的函數而無需附加軟件包,從而節省內存。這在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記錄在示例) ,但功能如graphics
程序包中的plot
這些程序包在R啓動時自動加載。
因此,我的問題是,導入功能如plot
,optim
或qchisq
有什麼好處?
這意味着,如果想將其推廣到泛型,那麼導入這樣的函數纔有意義? (如果想要假設搜索路徑中沒有其他函數叫做'plot') – Henrik
從程序包使用的導入函數(從基地以外的軟件包始終可用)總是有意義的,否則當一些第三包定義了一個函數'plot = function(...)「我有一個很好的故事來告訴你'你的代碼中斷了。用戶無法控制搜索路徑。 –
然而,如果我總是使用'::'運算符調用一個函數(例如,總是'graphics :: plot()'而不是'plot()'),如果已經連接了一個包,還有導入的好處嗎? – Henrik