在包中使用makeActiveBinding

时间:2019-01-15 17:39:36

标签: r

我只需要一个R函数,如:

> la. <- function (envir = globalenv()) {ls(all = T, envir = envir) }`

具有有效的绑定,所以我需要输入方括号

> makeActiveBinding('la', la., globalenv())

如此

> la
[1]  "la"  "la."

我现在想实现函数la()并将其绑定la到一个包中 这样,当我加载程序包时,la就可以使用了。

如何在包环境中将功能la.()绑定到符号la

我应将什么值传递给函数envir的{​​{1}}自变量

感谢您的帮助

2 个答案:

答案 0 :(得分:1)

这可能是在.onLoad函数中要做的事情,在您的软件包中是这样的:

NAMESPACE <- environment()

la. <- function(){ 
  ls(all = T, envir = globalenv())
}

.onLoad <- function(libname, pkgname) {
  makeActiveBinding("la", la., NAMESPACE)
}

答案 1 :(得分:0)

我认为这应该可行:

让我们在包内编写两个函数:

# function one
ll_ <- function(){
  ls(envir = globalenv(), all.names = TRUE)
}

# function two
l_ <- function(){
  ls(envir = globalenv(), all.names = FALSE)
}

然后编写您的onLoad()函数

# Runs when package is loaeded
.onLoad <- function(libname, pkgname) {
  ns <-  asNamespace(pkgname)
  makeActiveBinding("ll", ll_,  env = ns) 
  makeActiveBinding("l", l_,  env = ns) 
  namespaceExport(ns, c('ll','l'))
}

在装入软件包时,请命令l和ll。运行函数l()和ll()

最后,我可以肯定的是,通过将所有函数嵌入列表并使用函数,onLoad()的定义可能会变得更轻巧

感谢罗曼的建议