关于编码方案的问题:我正在开发一个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 ::'吗?
如果你使用importFrom
它没有必要;来自Hadley Wickham的R Packages:
如果您只使用其他软件包中的一些函数,我建议在DESCRIPTION文件的Imports:字段中记下软件包名称,并使用::,例如pkg :: fun()显式调用函数。也可以以类似的方式导入运算符,例如@importFrom magrittr%>%。
如果你反复使用函数,你可以通过@importFrom pkg fun导入函数来避免::。这也具有很小的性能优势,因为::在功能评估时间增加约5μs。
但是,许多人认为使::
成为明确和可读的代码是一种很好的做法;如果有人查看你的源代码,他们就会准确地知道你所调用的函数的来源。
您不需要在代码中使用::
。导入这些项目使它们在本地可用。
正如尼古拉所说,有理由说你可以使用::
。它清楚地表明了函数的来源。但是,如果使用::
,则导入函数没有意义:导入到命名空间的rnorm
对象将被忽略。
对于我自己,我会导入而不是使用::
。对::
的调用解析导入函数的开销比解析调用外部包的开销要小。