如何在全局环境中加载包的内部功能

时间:2014-03-12 17:18:57

标签: r

我有一个包,其内部函数我想在全局环境中加载。我能想到的唯一方法是手动完成,即

f <- packageName:::someInternalFunction

适用于所有内部功能。我猜这是一种更简单的方法,但是怎么做?提前谢谢。

3 个答案:

答案 0 :(得分:7)

您可以执行以下操作:

library(pacman)

pack.name <- "qdap"

hidden <- setdiff(p_funs(pack.name, TRUE), p_funs(pack.name))

invisible(lapply(hidden, function(x) {

    a <- strtrim(x, 1) == "%" 
    b <- substring(x, nchar(x)) == "%"

    if (a && b) {
        x2 <- paste0("`", x, "`")
    } else {
        x2 <- x
    }

    assign(x, eval(parse(text=paste0(pack.name, ":::", x2))), 
        envir = .GlobalEnv)
}))

答案 1 :(得分:4)

使用包pacman作为示例:

attach(loadNamespace("pacman"), name = "pacman_all")

现在所有未导出的功能都可用。您可以使用search()查看附加的“pacman_all”。

要恢复,请运行detach("pacman_all")

答案 2 :(得分:2)

  1. 使用CRAN的包源代码下载tar.gz并解压缩
  2. 在DESCRIPTION
  3. 中重命名为“mypackage”(例如)
  4. 修改其NAMESPACE以导出所有您需要的内容
  5. install.package(<path to mypackage>, type="source", repos=NULL)
  6. library("mypackage")
  7. 你当然意识到依赖别人的内部功能是非常危险的,因为这些功能的行为容易在没有警告的情况下改变(这是他们内部的一个原因)。安装你自己的软件包修改版本可以减少这种危险,因为它可以让你更好地控制你正在调用的代码。