我正在使用 devtools、testthat 和 roxygen2 开发 R 包。我在数据文件夹中有几个数据集(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'。另外,文档中的示例看起来无法运行,即使安装了软件包,它们也可以。
有什么建议么?非常感谢。