r包开发:何时使用::

问题描述 投票:1回答:2

关于编码方案的问题:我正在开发一个r包,我想把它提交到cran。所有外部函数都在NAMESPACE文件中正确导入。我是否必须使用::在我的源代码中指定包,或者通过在命名空间中提供导入是否一切正常?示例在NAMESPACE中,有类似的东西

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

使用eg.gnnorm时是否必须明确调用统计数据

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

或者我可以省略关于头部政策的'stats ::'吗?

r dependencies
2个回答
3
投票

如果你使用importFrom它没有必要;来自Hadley Wickham的R Packages

如果您只使用其他软件包中的一些函数,我建议在DESCRIPTION文件的Imports:字段中记下软件包名称,并使用::,例如pkg :: fun()显式调用函数。也可以以类似的方式导入运算符,例如@importFrom magrittr%>%。

如果你反复使用函数,你可以通过@importFrom pkg fun导入函数来避免::。这也具有很小的性能优势,因为::在功能评估时间增加约5μs。

但是,许多人认为使::成为明确和可读的代码是一种很好的做法;如果有人查看你的源代码,他们就会准确地知道你所调用的函数的来源。


1
投票

您不需要在代码中使用::。导入这些项目使它们在本地可用。

正如尼古拉所说,有理由说你可以使用::。它清楚地表明了函数的来源。但是,如果使用::,则导入函数没有意义:导入到命名空间的rnorm对象将被忽略。

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

© www.soinside.com 2019 - 2024. All rights reserved.