首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >R组件开发中负载设置的正确实践

R组件开发中负载设置的正确实践
EN

Stack Overflow用户
提问于 2016-03-30 23:57:24
回答 1查看 63关注 0票数 1

在每个包加载一次的情况下,自动运行一些设置代码(无论是R还是C++)的正确方法是什么?理想情况下,一旦用户执行library(mypackage),就会执行上述代码。现在,它包含在一个需要运行一次的setup()函数中。

为了获得更多的上下文,在我的具体案例中,我使用的是一个使用格洛格的外部库,并且只需要执行google::InitGoogleLogging()一次。这有点尴尬,因为我试图使用在图书馆内,因为我必须使用它,即使它应该从main调用。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-03-31 00:09:05

只要读一读“写R扩展”,然后跟随引线--它要么是.onAttach(),要么是.onLoad()。我有很多包在那里做一些小事情--这与调用C++ (不管是否通过Rcpp )无关,因为您只是想知道在哪里初始化。

示例: Rblpapi创建一个连接并存储它

代码语言:javascript
复制
.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++代码)。关键是这些钩子保证您在包加载/附加时执行,这正是您在这里想要的。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36321864

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档