首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在R包中包含Python函数,而无需在每次使用该函数时导入整个包

在R包中包含Python函数,而无需在每次使用该函数时导入整个包
EN

Stack Overflow用户
提问于 2019-10-11 01:11:54
回答 1查看 70关注 0票数 0

如果我在我创建的R包中调用一个函数,我会在它前面加上它所在的包名。例如,如果我希望在我的包的myfunc函数中使用mgcv包中的gam,我可以编写如下代码:

代码语言:javascript
复制
myfunc <- function(y, x, df){
    mgcv::gam(y ~ s(x), data = df)
}

现在,假设我想使用peakutils包中的Python函数indexes。我可以写,

代码语言:javascript
复制
myfunc <- function(y){
    pu <- reticulate::import("peakutils")
    pu$indexes(y)
}

但这会在每次调用myfunc时导入整个包,这并不理想。这样做的正确方法是什么?据推测,DESCRIPTION文件中的Imports:仅用于R包。或者,有没有办法把它包含在那里?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-10-11 18:43:47

解决方案是在包的.onLoad函数中import Python库,并确保指定delay_load = TRUE

例如,

代码语言:javascript
复制
# Global reference to peakutils package - initialized in .onLoad
peakutils <- NULL

# Called upon loading the package
.onLoad <- function(libname, pkgname) {
  # Use superassignment to update global reference to peakutils
  peakutils <<- reticulate::import("peakutils", delay_load = TRUE)
}

虽然这会加载整个包,但它只执行一次,而不是每次都需要Python库中的函数。here给出了详细的解释。

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

https://stackoverflow.com/questions/58327969

复制
相关文章

相似问题

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