在开发包时,如何在存在依赖时交互式地探索我的功能

While developing package, how to explore my function interactively when there's dependency

在下面的示例中,我的包从 foreign 包导入 read.dta 并在函数中使用它。为了检查我的函数的工作情况,我喜欢逐行手动执行它(即突出显示每一行并 运行,不使用调试器)。但是,这样做时,read.dta 并未实际导入且无法使用(即使在构建和重新加载之后)。

#' @importFrom foreign read.dta

DDGet <- function(url = 'http://uofi.box.com/file.dta') {
  # Download underlying Polity IV data
  tmpfile <- tempfile()
  download.file(url, tmpfile, method = "wget")
  DDData <- read.dta(tmpfile, to.data.frame = TRUE)
}

那么,如何在交互式开发过程中使所有依赖项可用?

或者这可能不是正确的工作流程?我来自交互式分析背景,习惯于逐行执行我的代码。包的功能开发也是这样吗?

在为包或任何外部使用编写函数时,我高度推荐使用::运算符。该运算符可用于在调用函数时直接引用包的命名空间。 这对于编程以避免与不同包中相同或相似命名的函数混淆是很有用的。

在你的情况下,::还有另一个优势: 每当调用该函数时,都会自动加载相关包。 这对于检查你的代码很有用,因为你不必提前附加包,函数会 运行 "as is" (前提是安装了包,导入的包应该是这样) .

在此处查找有关该主题的更多信息: http://r-pkgs.had.co.nz/namespace.html

对于您的情况,您可以这样更改代码:

DDGet <- function(url = 'http://uofi.box.com/file.dta') {
  tmpfile <- tempfile()
  download.file(url, tmpfile, method = "wget")
  DDData <- foreign::read.dta(tmpfile, to.data.frame = TRUE)
}

如果这对您的问题有帮助,请告诉我。