套件开发:何时使用::

时间:2018-09-07 10:30:38

标签: r dependencies

关于编码conventiosn的问题:我正在研究r包,我想将其提交给cran。所有外部功能均已正确导入NAMESPACE文件中。我是否必须使用::在源代码中指定包,还是通过在命名空间中提供导入功能就可以了吗?例 在NAMESPACE中,类似

importFrom(stats, formula, ave, aggregate, median, sd, qnorm, rnorm, runif)

使用rnorm时是否必须明确调用统计信息

random <- stats::rnorm(100, m = 0, sd = 1)

或者我可以在公职政策方面省略'stats ::'吗?

2 个答案:

答案 0 :(得分:3)

如果您使用importFrom,则不是不必要;摘自Hadley Wickham的R Packages

  

如果您仅使用另一个软件包中的一些功能,   建议在“导入:”字段中注明包装名称   描述文件,并使用::显式调用函数,   例如pkg :: fun()。也可以以类似方式导入运算符,   例如,@ importFrom magrittr%>%。

     

如果重复使用函数,则可以通过导入避免::   @importFrom pkg的功能很有趣。这也有一个小   性能上的好处,因为:: ::大约增加了5 µs   评估时间。

但是,许多人认为使用::是使代码清晰易读的好习惯;如果有人查看您的源代码,他们就会确切知道您调用的函数来自哪里。

答案 1 :(得分:1)

您无需在代码中使用::。导入这些项目将使其在本地可用。

正如Nicola所说,有一些争论为什么您可以使用::。它清楚地表明了函数的来源。但是,如果您确实使用::,则导入该函数毫无意义:导入到您的命名空间中的rnorm对象将被忽略。

对于我自己,我将导入而不是使用::。调用导入函数要比调用::来解决将调用解析为外部包的开销少。