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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。