Hen*_*rik 29 namespaces r package
R的命名空间机制允许一个export用户可见的功能.此外,它允许import从其他包中起作用.虽然出口的好处是显而易见的,但我在理解进口的好处方面存在更多问题.
似乎有一个好处是,可以使用其他软件包中的函数而无需附加软件包,从而节省内存.这在写作R扩展手册的1.6.4节中有所例证.
但是,导入功能必须具有其他好处.特别是,第1.6.6节(处理S4类)显示namespace了stats4包:
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)
Run Code Online (Sandbox Code Playgroud)
这里导入的函数既不是S4类也不是泛型(使用import也是有意义的,如该部分中的示例所述),但是函数类似于R启动时自动加载plot的graphics包.
因此我的问题是,导入函数有什么好处plot,optim或者qchisq?
Mar*_*gan 23
如果foo从包Bar导入函数,则无论用户对其搜索路径做什么,例如通过附加也具有功能的包Baz,都可以找到该功能foo.没有名称空间,包代码会突然发现自己使用Baz::foo.还存在效率问题(foo立即找到,而不是在搜索路径上的所有符号之后),但对于大多数应用程序而言,这些问题可能是微不足道的.以同样的方式,由于更少的冲突(或使用非预期的功能)和更有效的查找,这importFrom是一种改进import.
使用S4(和S3),事情会变得非常复杂.非泛型函数graphics::plot可以setGeneric在两个不同的包中提升为泛型(with ),每个泛型可以附加自己的一组方法.包作者需要准确了解哪些plot泛型,以及哪些方法调度表,它们的类和方法都可以看到.
调用函数pkg::foo始终解析为预期的函数.它要求pkg列在DESCRIPTION文件的Depends:字段中(可能在Imports中:但是它似乎误导了广告而不是从pkg导入),污染了用户的搜索路径.它还涉及两个符号查找和一个函数call(::),因此效率较低.对我来说,懒惰和缺乏注意力的细节部分也被::视为乏味且容易出错.
包codetoolsBioC(通过带有用户名和密码的svn readonly)可以从现有的包中生成一个NAMESPACE文件(或者至少它可以在R-devel的最近更改之前在没有一个包的情况下在包上引入NAMESPACE;我还没有在这样的包上尝试过codetoolsBioC包).
| 归档时间: |
|
| 查看次数: |
5126 次 |
| 最近记录: |