对于那些不想阅读我的"案例"的人来说,这就是本质:
什么是在何时充分利用命名空间机制的推荐方法
a)只使用贡献包(比如在一些R分析项目中)?
b)关于开发自己的包裹?
如何最好地避免与正式类(在我的情况下主要是引用类)之间的冲突,因为甚至没有与::类(AFAIU)相当的命名空间机制?
这件事情在我脑海中唠叨了大约两年了,但我觉得我没有达到令人满意的解决方案.另外我觉得情况越来越糟.
我们看到CRAN,github,R-Forge等上的包装数量越来越多,这简直太棒了.
在这样一个分散的环境中,组成R的代码库(简单来说就是基础R和贡献R,为简单起见)自然会偏离理想状态而不是鲁棒性:人们遵循不同的约定,有S3,S4如果存在强制执行约定的" 中央清算实例 ",那么事情就不会像它们那样"一致" .没关系.
鉴于上述情况,使用R编写健壮的代码可能非常困难.并非您需要的所有东西都在基础R中.对于某些项目,您最终会加载相当多的贡献包.
恕我直言,这方面最大的问题是命名空间概念在R中使用的方式:R允许简单地写出某个函数/方法的名称而不明确要求它的命名空间(即foovs. namespace::foo).
所以为了简单起见,这就是每个人都在做的事情.但是这样,名称冲突,破坏代码以及重写/重构代码的需要只是时间问题(或者加载的不同包的数量).
充其量,您将了解新添加的包掩盖/重载哪些现有功能.在最坏的情况下,在您的代码中断之前,您将毫无头绪.
几个例子:
(我不记得哪些功能特别导致了这些问题,但如果有兴趣,我愿意再次查询)
令人惊讶的是,这似乎并没有困扰很多程序员.我试图在r-devel上多次提高兴趣,但没有显着的效果.
::运营商的缺点::Dominick Samperi 指出,使用操作员可能会在某些情况下严重影响效率.