在以下示例中,我的包从read.dta
包导入foreign
并在函数中使用它。为了检查我的函数的工作情况,我喜欢逐行手动逐行(即突出显示每一行并运行,而不是使用调试器)。但是,在执行此操作时,read.dta
实际上并未导入且无法使用(即使在Build& Reload之后)。
#' @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)
}
那么,如何在交互式开发过程中使所有依赖项都可用?
或者这可能不是正确的工作流程?我来自一个交互式分析背景,我习惯逐行逐步浏览我的代码。是一个如何开发包的功能?
答案 0 :(得分:2)
在编写软件包的功能或任何外部使用时,我高度建议使用::
运算符。调用该函数时,此运算符可用于直接引用包的命名空间。
这对于编程很有用,可以避免与不同包中相同或类似命名的函数混淆。
在您的情况下,::
还有另一个优势:
无论何时调用函数,都会自动加载相关包。
这对于检查代码非常有用,因为您不必提前附加包,并且该功能将按照&#34;&#34; (如果安装了软件包,应该是导入软件包的情况。)
在此处查找有关该主题的更多信息: 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)
}
如果这对您的问题有帮助,请告诉我。