在所选环境中加载r包

在所选环境中加载r包,r,r-package,R,R Package,我不熟悉R包开发和堆栈溢出,但我一直无法在任何地方找到这些信息 我正在尝试加载R包mice,而不会污染我的命名空间。我尝试只导入我正在使用的函数,但没有成功。因此,我将满足于在一个特定环境中加载整个包,如下所示: e <- new.env() load_package_into_environment(e, package = "mice") eval(mice(data, m = m, maxit = max.iter, printFlag = F), envir = e) 文件:NA

我不熟悉R包开发和堆栈溢出,但我一直无法在任何地方找到这些信息

我正在尝试加载R包mice,而不会污染我的命名空间。我尝试只导入我正在使用的函数,但没有成功。因此,我将满足于在一个特定环境中加载整个包,如下所示:

e <- new.env()
load_package_into_environment(e, package = "mice")
eval(mice(data, m = m, maxit = max.iter, printFlag = F), envir = e)
文件:NAMSPACE(由roxygen自动生成)

文件:impute.R(使用mice包中的mice函数)


我昨天也犯了同样的错误,提出了一个类似的问题(顺便说一句,这个问题已经被否决了)。今天我找到了一个解决方案,我希望它也能对你起作用,也许你(或其他人)能对它多点了解

我正在开发一个R包,并使用roxygen2来记录函数。由于我必须使用mice::mice函数,所以我在描述文件的“导入”部分列出了mice。在构建和检查包时,一切都会顺利运行,直到我实际运行调用mice::mice的函数,在这一点上,我得到的错误与您得到的错误完全相同

就我的理解而言,这就是导致问题的原因: 在使用鼠标的函数的文档部分,您需要添加以下内容:

#' @importMethodsFrom mice
#' @importFrom mice mice
请注意,对于我迄今为止使用的大多数软件包,下面这一行就足够了:

#' @importFrom mice mice
显然,mice也要求您添加@importMethodsFrom指令。我猜这是因为它使用的是S4类,但我对它们知之甚少,所以我只知道它是这样工作的

我通过阅读本页的“S4”部分发现了这一点:

那么,回到您的具体案例,我想您函数的文档应该是这样的

#' @import data.table
#' @importFrom mice mice
#' @importMethodsFrom mice
#' @export
impute <- function(data, m = 5, max.iter = 5){...}
#@import data.table
#“@importFrom老鼠
#“@importmethodsfrommices
#“@出口

插补包“老鼠”内部调用全球环境的插补方法。根据作者的说法,这是为了提供您自己的自定义插补方法。因此,包还必须在全局环境中公开其默认实现。我确信这是一个纯粹判断的好例子——内部方法现在只有通过全局环境才能被包识别。这首先违背了打包代码的目的。如果希望允许包使用外部函数,那么只需提供一个API将它们传递给包即可

您看到的错误消息由函数“鼠标:::检查方法”触发:

notFound <- !vapply(fullNames, exists, logical(1), mode = "function", inherits = TRUE)

notFound将包加载到专用环境中。“污染”是什么意思?
importFrom
是我的第一种方法,但我已经导入了我调用的一个函数以及其中的所有依赖函数,但我仍然收到一条消息,当我尝试构建包时,没有找到这些依赖函数。我认为这是鼠标制作的结果。请查看并阅读
import
软件包,它(几乎)完全符合您的要求。我唯一没有尝试过的是,您是否可以创建自己的环境,而不是指定新环境的名称。另一个区别可能是
import
将环境附加到搜索路径中,这可能不是您想要的(您可以通过分离它来修复)。
1. Error: Output format is a list of lenght m and each element is a data.table -
The following functions were not found: mice.impute.pmm, mice.impute.polyreg
1: withCallingHandlers(eval(code, new_test_environment), error = capture_calls, message = function(c) invokeRestart("muffleMessage"))
2: eval(code, new_test_environment)
3: eval(expr, envir, enclos)
4: impute(data, m = M) at test-impute.R:12
5: mice(data, m = m, maxit = max.iter, printFlag = F) at          C:\repos\bug.example2/R/impute.R:11
6: check.method(setup, data)
7: stop(paste("The following functions were not found:", paste(fullNames[notFound], 
   collapse = ", ")))
#' @importMethodsFrom mice
#' @importFrom mice mice
#' @importFrom mice mice
#' @import data.table
#' @importFrom mice mice
#' @importMethodsFrom mice
#' @export
impute <- function(data, m = 5, max.iter = 5){...}
notFound <- !vapply(fullNames, exists, logical(1), mode = "function", inherits = TRUE)
#' @importFrom mice mice

#' @export
mice.impute.pmm <- mice::mice.impute.pmm

#' @export
mice.impute.polyreg <- mice::mice.impute.polyreg