我正在开发一个R包,使用devtools、testthat和roxygen2。在data文件夹中有几个数据集(foo.txt和bar.csv)。
我的文件结构如下:
/ mypackage
/ data
* foo.txt, bar.csv
/ inst
/ tests
* run-all.R, test_1.R
/ man
/ R
我相当确定'foo'和'bar'的文档已经正确记录:
#' Foo data
#'
#' Sample foo data
#'
#' @name foo
#' @docType data
NULL
#' Bar data
#'
#' Sample bar data
#'
#' @name bar
#' @docType data
NULL
我希望在我的文档示例和单元测试中使用“foo”和“bar”中的数据。
例如,我想通过调用以下命令在我的testthat测试中使用这些数据集:
data(foo)
data(bar)
expect_that(foo$col[1], equals(bar$col[1]))
同时,我希望文档中的示例代码呈现如下格式:
#' @examples
#' data(foo)
#' functionThatUsesFoo(foo)
如果在开发软件包时尝试调用data(foo),将会收到“找不到数据集 'foo'”的错误。但是,如果构建软件包、安装并加载后,就可以使测试和示例工作。
我目前的解决方法是不运行示例:
#' @examples
#' \dontrun{data(foo)}
#' \dontrun{functionThatUsesFoo(foo)}
在测试中,使用特定于我的本地计算机的路径预加载数据:
foo <- read.delim(pathToFoo, sep="\t", fill = TRUE, comment.char="#")
bar <- read.delim(pathToBar, sep=";", fill = TRUE, comment.char="#"
expect_that(foo$col[1], equals(bar$col[1]))
这似乎并不理想 - 特别是因为我正在与他人合作 - 要求所有合作者都具有对“foo”和“bar”的相同完整路径。此外,文档中的示例看起来无法运行,即使安装了软件包也是如此。 有什么建议吗?非常感谢。
.Rdata
文件,则load_all
将为您加载它。 - hadley