关于编码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 ::'吗?
答案 0 :(得分:3)
如果您使用importFrom
,则不是不必要;摘自Hadley Wickham的R Packages:
如果您仅使用另一个软件包中的一些功能, 建议在“导入:”字段中注明包装名称 描述文件,并使用::显式调用函数, 例如pkg :: fun()。也可以以类似方式导入运算符, 例如,@ importFrom magrittr%>%。
如果重复使用函数,则可以通过导入避免:: @importFrom pkg的功能很有趣。这也有一个小 性能上的好处,因为:: ::大约增加了5 µs 评估时间。
但是,许多人认为使用::
是使代码清晰易读的好习惯;如果有人查看您的源代码,他们就会确切知道您调用的函数来自哪里。
答案 1 :(得分:1)
您无需在代码中使用::
。导入这些项目将使其在本地可用。
正如Nicola所说,有一些争论为什么您可以使用::
。它清楚地表明了函数的来源。但是,如果您确实使用::
,则导入该函数毫无意义:导入到您的命名空间中的rnorm
对象将被忽略。
对于我自己,我将导入而不是使用::
。调用导入函数要比调用::
来解决将调用解析为外部包的开销少。