相关疑难解决方法(0)

编写健壮的R代码:命名空间,屏蔽和使用`::`运算符

精简版

对于那些不想阅读我的"案例"的人来说,这就是本质:

  1. 什么是最小化新包破坏现有代码的可能性的推荐方法,即使您编写的代码尽可能健壮
  2. 什么是在何时充分利用命名空间机制的推荐方法

    a)只使用贡献包(比如在一些R分析项目中)?

    b)关于开发自己的包裹?

  3. 如何最好地避免与正式类(在我的情况下主要是引用类)之间的冲突,因为甚至没有与::类(AFAIU)相当的命名空间机制?


R宇宙的运作方式

这件事情在我脑海中唠叨了大约两年了,但我觉得我没有达到令人满意的解决方案.另外我觉得情况越来越糟.

我们看到CRAN,github,R-Forge等上的包装数量越来越多,这简直太棒了.

在这样一个分散的环境中,组成R的代码库(简单来说就是基础R贡献R,为简单起见)自然会偏离理想状态而不是鲁棒性:人们遵循不同的约定,有S3,S4如果存在强制执行约定的" 中央清算实例 ",那么事情就不会像它们那样"一致" .没关系.

问题

鉴于上述情况,使用R编写健壮的代码可能非常困难.并非您需要的所有东西都在基础R中.对于某些项目,您最终会加载相当多的贡献包.

恕我直言,这方面最大的问题是命名空间概念在R中使用的方式:R允许简单地写出某个函数/方法的名称而不明确要求它的命名空间(即foovs. namespace::foo).

所以为了简单起见,这就是每个人都在做的事情.但是这样,名称冲突,破坏代码以及重写/重构代码的需要只是时间问题(或者加载的不同包的数量).

充其量,您将了解新添加的包掩盖/重载哪些现有功能.在最坏的情况下,在您的代码中断之前,您将毫无头绪.

几个例子:

(我不记得哪些功能特别导致了这些问题,但如果有兴趣,我愿意再次查询)

令人惊讶的是,这似乎并没有困扰很多程序员.我试图在r-devel上多次提高兴趣,但没有显着的效果.

使用::运营商的缺点

  1. ::Dominick Samperi 指出,使用操作员可能会在某些情况下严重影响效率.
  2. 开发 …

coding-style namespaces r package masking

45
推荐指数
2
解决办法
3451
查看次数

标签 统计

coding-style ×1

masking ×1

namespaces ×1

package ×1

r ×1