当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


R userhooks 获取和设置加载、附加、分离和卸载钩子的函数


R语言 userhooks 位于 base 包(package)。

说明

这些函数允许用户设置在附加/分离包以及加载(卸载)命名空间之前要采取的操作。

用法

getHook(hookName)
setHook(hookName, value,
        action = c("append", "prepend", "replace"))

packageEvent(pkgname,
             event = c("onLoad", "attach", "detach", "onUnload"))

参数

hookName

字符串:钩子名称

pkgname

字符串:包/命名空间名称

event

字符串:包的事件。可以缩写。

value

一个函数或函数列表,或用于 action = "replace"NULL

action

应采取的行动。可以缩写。

细节

setHook 为用户提供了注册钩子的通用机制,即从系统(或用户)函数调用的函数列表。最初的一组钩子与包/命名空间上的事件相关联:这些钩子通过调用 packageEvent 来命名。

要完全删除钩子,请调用 setHook(hookName, NULL, "replace")

R包附于library或者通过其他方式加载,可以调用初始化代码。看.onLoad有关初始化期间调用的包钩子函数的说明。用户可以通过提供的钩子添加自己的初始化代码setHook(),函数将被称为funname(pkgname, pkgpath)里面一个try称呼。

事件的顺序取决于定义了哪些钩子,以及包是附加的还是刚刚加载的。在定义了所有钩子并附加了包的情况下,初始化事件的顺序如下:

  1. 包命名空间已加载。

  2. 包的 .onLoad 函数已运行。

  3. 如果 S4 方法调度已打开,则运行 setLoadAction 设置的任何操作。

  4. 命名空间是密封的。

  5. 用户的"onLoad" 钩子已运行。

  6. 该包将添加到搜索路径中。

  7. 包的 .onAttach 函数已运行。

  8. 包装环境是密封的。

  9. 用户的"attach" 钩子已运行。

当分离包并卸载其命名空间时,会运行类似的序列(但相反):

  1. 用户的"detach" 钩子已运行。

  2. 包的 .Last.lib 函数已运行。

  3. 该包将从搜索路径中删除。

  4. 用户的"onUnload" 钩子已运行。

  5. 包的 .onUnload 函数已运行。

  6. 包命名空间已卸载。

请注意,当R会话结束,包没有分离,命名空间也没有卸载,所以相应的钩子不会运行。

另请注意,某些用户钩子是在包不在搜索路径上的情况下运行的,因此在这些钩子中,需要使用双(或三)冒号运算符来引用包中的对象,如示例中所示。

如果添加多个钩子,它们通常按 getHook 显示的顺序运行,但 "detach""onUnload" 钩子以相反的顺序运行,因此包事件的默认设置是添加钩子 ‘inside’ 现有钩子。

钩子存储在基础包的环境 .userHooksEnv 中,名称为 ‘mangled’。

对于 getHook 函数,函数列表(可能为空)。对于setHook函数,没有返回值。对于 packageEvent ,派生的钩子名称(字符串)。

注意

钩子需要在它们修改的事件之前设置:对于标准包,这可能会出现问题,因为methods在启动序列的早期加载和附加。通常设置钩子的位置如下例所示,位于‘.R配置文件' 文件,但这不适用于methods.

例子

setHook(packageEvent("grDevices", "onLoad"),
        function(...) grDevices::ps.options(horizontal = FALSE))

也可以看看

librarydetachloadNamespace

有关双冒号和三冒号运算符的讨论,请参阅::

其他钩子可能会在以后添加:函数 plot.newpersp 已经有它们。

相关用法


注:本文由纯净天空筛选整理自R-devel大神的英文原创作品 Functions to Get and Set Hooks for Load, Attach, Detach and Unload。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。