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