ns-hooks
位于 base
包(package)。 说明
包可以提供在加载、附加、分离或卸载时调用的函数。
用法
.onLoad(libname, pkgname)
.onAttach(libname, pkgname)
.onUnload(libpath)
.onDetach(libpath)
.Last.lib(libpath)
参数
libname |
一个字符串,给出定义名称空间的包所在的库目录。 |
pkgname |
给出包名称的字符串。 |
libpath |
给出包的完整路径的字符串。 |
细节
加载后,loadNamespace
查找名为 .onLoad
的钩子函数,并在密封命名空间和处理导出之前调用它(使用两个未命名参数)。
当附加包时(通过 library
或 attachNamespace
),将查找钩子函数 .onAttach
,如果找到则在密封包环境之前调用(使用两个未命名参数)。
如果函数 .onDetach
位于命名空间中或 .Last.lib
从包中导出,则当包被 detach
编辑时,将调用该函数(使用单个参数)。请注意,如果 .onAttach
失败,它可能会被调用,因此应该防御性地编写它。 (它在 tryCatch
内调用,因此错误不会阻止包被分离。)
如果卸载命名空间(通过 unloadNamespace
),则在最终卸载之前运行钩子函数 .onUnload
(使用单个参数)。
请注意,.onLoad
和 .onUnload
中的代码不应假定除基本包之外的任何包位于搜索路径上。当前包中的对象将是可见的(除非规避了这一点),但应导入其他包中的对象或应使用双冒号运算符。
.onLoad
、 .onUnload
、 .onAttach
和 .onDetach
被视为命名空间中的内部对象,不应导出(而 .Last.lib
应导出)。
请注意,包不会分离,命名空间也不会在包结束时卸载。R除非用户安排这样做(例如,通过
.Last
)。
命名空间函数所需的任何内容都应在加载/卸载时由.onLoad
和.onUnload
钩子。例如,可以加载 DLL(除非由useDynLib
指令中的‘NAMESPACE’文件)并在中初始化.onLoad
并卸载于.onUnload
.采用.onAttach
仅适用于仅当包对用户可见时才需要的操作(例如 start-up 消息)或需要在创建包环境后运行。
好的做法
加载命名空间应尽可能保持静默,并由 .onAttach
给出启动消息。这些消息(以及 .onLoad
中的任何重要消息)应使用 packageStartupMessage
,以便在分散注意力的情况下将其静音。
不应该有任何电话library
也不require
在这些钩子中。一个包加载其他包的方式是通过‘取决于' 中的字段DESCRIPTION’ 文件:这可确保记录依赖性并按正确的顺序加载包。加载命名空间不应更改搜索路径,因此不应附加包,而是应通过(有选择地)从其他包的命名空间导入来实现命名空间对另一个包的依赖。
使用带有参数 help
的 library
来显示有关包的基本信息,应在计算的包信息对象上使用 format
并将其传递给 packageStartupMessage
。
不应该有任何电话installed.packages
在启动代码中:它可能非常慢并且在以下版本中可能会失败R如果软件包安装并行进行,则在 2.14.2 之前。请参阅其帮助页面以获取替代方案。
应加载已编译的代码(例如,通过
library.dynam
) 在.onLoad
或一个useDynLib
指令中的‘NAMESPACE' 文件,而不是在.onAttach
。同样,不应卸载已编译的代码(例如,通过
library.dynam.unload
) 在.Last.lib
也不.onDetach
, 只有在.onUnload
.
也可以看看
setHook
展示了用户如何在相同事件上设置钩子,并列出了涉及所有钩子的事件序列。
reg.finalizer
用于在会话结束时运行的钩子。
loadNamespace
了解有关命名空间的更多信息。
相关用法
- R ns-dblcolon 双冒号和三冒号运算符
- R ns-internals 命名空间内部结构
- R ns-reflect 命名空间反射支持
- R ns-load 加载和卸载命名空间
- R ns-topenv 顶级环境
- R noquote “无引号”字符串打印类
- R numeric 数值向量
- R numeric_version 数字版本
- R nargs 函数的参数数量
- R normalizePath 以规范形式表达文件路径
- R nchar 计算字符数(或字节数或宽度)
- R norm 计算矩阵的范数
- R name 名称和符号
- R nrow 数组的行/列数
- R names 对象的名称
- R nlevels 因子的水平数
- R file.path 构造文件路径
- R grep 模式匹配和替换
- R getwd 获取或设置工作目录
- R vector 向量 - 创建、强制等
- R lapply 对列表或向量应用函数
- R dump R 对象的文本表示
- R Sys.getenv 获取环境变量
- R rank 样本排名
- R getDLLRegisteredRoutines DLL 中 C/Fortran 例程的反射信息
注:本文由纯净天空筛选整理自R-devel大神的英文原创作品 Hooks for Namespace Events。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。