R包开发中加载时设置的正确做法
Proper practice for setup upon load in R package development
在每次加载包时自动运行一些设置代码(R或C++)一次的正确方法是什么?理想情况下,所述代码将在用户执行library(mypackage)
之后执行。现在,它包含在一个setup()
函数中,该函数需要在执行其他操作之前先运行一次。
只是为了获得更多上下文,在我的特定情况下,我使用的是一个使用glog的外部库,并且我需要执行google::InitGoogleLogging()
一次,而且只执行一次。这有点尴尬,因为我试图在库中使用它,因为我必须这样做,即使它应该从main
调用。
只需阅读"编写R扩展"并遵循线索即可--它要么是.onAttach()
,要么是.onLoad()
。我有很多包在那里做一些小事情——对C++的调用(是否通过Rcpp)并不重要,因为你只是在问在哪里初始化。
示例:Rlpapi创建一个连接并将其存储为
.pkgenv <- new.env(parent=emptyenv())
.onAttach <- function(libname, pkgname) {
if (getOption("blpAutoConnect", FALSE)) {
con <- blpConnect()
if (getOption("blpVerbose", FALSE)) {
packageStartupMessage(paste0("Created and stored default connection object ",
"for Rblpapi version ",
packageDescription("Rblpapi")$Version, "."))
}
} else {
con <- NULL
}
assign("con", con, envir=.pkgenv)
}
我有一些(非公开的)代码以同样的方式设置了一个专有数据库的句柄(使用C++代码)。关键是这些钩子保证在包加载/附加时执行,这正是您想要的。
相关文章:
- std::原子加载和存储都需要吗
- 如何加载(或映射)文件部分的最大大小,但适合在Windows上的RAM
- C++ 雷神库 - 使用资源加载器类时出现问题(不命名类型)
- 为什么加载SDF会导致Mobilizer创建闭环错误
- C++atioglxx.pdb未加载错误glBufferData OpenGL
- 如何使用tinyxml2从XML加载父实体和子实体
- 如何在C++中使用pybind11加载一个pickle python列表
- 系统.将数组移交给c#中动态加载的c++DLL时发生AccessViolationException
- 加载器,设置带有参数的源
- 如何设置我的dll加载,该dll取决于Env-ailiable的某些第三部分DLL
- 在加载页面时,如何为iwebbrowser2设置背景颜色
- QML:设置动画图像源,而不加载资源中的文件
- 分析我的输出文件时,如何设置IDA加载源文件
- 直接在.png加载的cimage上绘制时,将文本颜色设置为
- 从PC加载图像并将其设置为QT中的标签
- R包开发中加载时设置的正确做法
- 通过调用C++函数设置加载器组件
- Qt c++加载GUI然后加载其他设置
- 我的GLSL着色器对象/包装器是否应该封装加载/设置VertexArrayObject
- QML QSettings和QML -不能保存/加载设置