esp*_*lli 11 r units-of-measurement r-package
在我正在开发的包中,我需要定义一个新单元:飞行高度(FL)相当于100英尺.
该units包提供以下可能性:
units::install_conversion_constant("FL", "ft", 100)
Run Code Online (Sandbox Code Playgroud)
为了使包test(devtools::test())和包check(devtools::test())都能使用这个用户定义的单元进行单元测试,我发现我需要在包加载阶段注册它.
这是我做的:
在zzz.R(一个新的文件,按照"当你做需要的副作用"一节):
# register flight levels (FL) as a unit when loading this package
.onLoad <- function(libname, pkgname) {
# install user-define unit for flight level
units::install_conversion_constant("FL", "ft", 100)
invisible()
}
# register flight levels (FL) as a unit when loading this package
.onUnload <- function(libname, pkgname) {
# uninstall user-define unit for flight level
units::remove_symbolic_unit("FL")
invisible()
}
Run Code Online (Sandbox Code Playgroud)
如果不这样做并将单元注册码放在某个R/unit-conversion.R文件中会devtools::test()成功但devtools::check()失败.
解决方案是否超出正确的注册方法(并删除[应该这样做吗?])包中的新单元?
小智 3
这几乎绝对是为您的包裹做这件事的地方。我说几乎是因为每条规则都有例外。请阅读下面的部分,了解更多详细信息以及基本 R 手册中的良好实践推荐
\n\nhttps://stat.ethz.ch/R-manual/R-devel/library/base/html/ns-hooks.html
\n\n\n\n良好实践加载命名空间应尽可能保持静默,\n 并由 .onAttach 给出启动消息。这些消息(以及 .onLoad 中的任何重要消息)应使用 packageStartupMessage,以便在分散注意力的情况下将其静音。
\n\n这些挂钩中不应调用库或 require。包加载其他包的方法是通过 \xe2\x80\x98DESCRIPTION\xe2\x80\x99 文件中的 Depends 字段:这可确保记录依赖关系并以正确的方式加载包命令。加载命名空间不应更改搜索路径,因此命名空间对另一个包的依赖应通过(选择性地)从其他包的命名空间导入来实现,而不是附加一个包。
\n\n使用带参数的库有助于显示有关包的基本信息。\n 应使用计算出的包信息对象的格式,并将其传递给 packageStartupMessage。
\n\n启动代码中不应该调用installed.packages:如果包安装并行进行,它可能会非常慢,并且在 2.14.2 之前的 R 版本中可能会失败。请参阅其帮助页面以了解替代方案。
\n\n编译后的代码应在 .onLoad 或\xe2\x80\x98NAMESPACE\xe2\x80\x99 文件中的 useDynLib 指令中加载(例如,通过library.dynam),而不是在 .onAttach 中。\n 同样,编译后的代码应在不能在.Last.lib 或.onDetach 中卸载(例如,通过library.dynam.unload),只能在.onUnload 中卸载。
\n
| 归档时间: |
|
| 查看次数: |
162 次 |
| 最近记录: |