在 R 包的插图中使用相对路径的示例输入数据和示例输出?

Example input data with example output using relative pathway in vignette of R package?

我正在组装一个 R 包。我想在插图中展示示例代码,其中示例数据文件(包含在包中)用于生成(示例)输出文件。

我在 Hadley Wickham 的 post (http://r-pkgs.had.co.nz/data.html) 中阅读了有关使用示例数据的信息,并且认为我应该将我的示例数据保留为原始数据,因为它必须经过解析才能生成输出。

所以,我在包结构中创建了一个目录

/Users/userName/myPackage/inst/extdata/

具有子目录 InputFiles 和 OutputFiles。

然后我将示例文件 (exampleData.csv) 放在 InputFiles 子目录 (/Users/userName/myPackage/inst/extdata/InputFiles) 中。

我的插图位于:

/Users/userName/myPackage/vignettes/myPackage.Rnw

它包含以下语法:

<<eval=FALSE>>=
fileString = "/Users/userName/myPackage/inst/extdata/InputFiles/exampleData.csv"
doFunction1(fileString)
doFunction2(fileString)
doFunction3(fileString, output ="Users/userName/myPackage/inst/extdata/OutputFiles")
@

我在开发这个小插图及其示例数据集时遇到两个问题:

1) 我不确定我对 extdata 文件的使用是否合适。根据上述 Hadley Wickham 参考资料,这似乎是放置我的示例文件的最佳目录名称和位置。

2) 我不确定如何使路径成为相对的,而不是绝对的,就像我目前拥有的那样。如您所见,此示例代码不会自动 运行。相反,我把它放在一个 eval=FALSE 的 R 块下,这样它就简单地列在那里供用户自己测试。在示例代码 运行 之后,用户还可以检查输出文件是否确实在 (/Users/userName/myPackage/inst/extdata/OutputFiles) 中创建。让用户在遵循示例时不必使用绝对路径的最佳方法是什么?是否可以从包目录 myPackage 中遵循相对路径?

我的数据文件由 .csv、.htm 和 .text 文件组成。以前在构建包的时候,我会把一个数据框保存为.rda文件,然后用户可以简单地使用:

data(example.rda)

读取该文件。他们不必写下整个路径。是否有类似的功能可用于读取 .csv、.html 和 .text 文件,然后将它们输出到示例输出位置 - 而无需使用完整路径?是否有可能拥有同时读取输入文件并写入输出文件的帮助功能?如果 /man 文件夹中的各种示例帮助功能将示例输出文件物理保存到示例输出文件夹,这会导致 CRAN 冲突吗?

引用包中文件的标准方法是:

# gives root package directory
system.file(package="myPackage") 

# specific file
system.file("extdata/InputFiles/exampleData.csv", package="myPackage") 

# best is to use cross-platform way to write a file path:
system.file("extdata", "InputFiles", "exampleData.csv", package="myPackage") 

使用devtools开发时,inst子目录会被忽略,所以你永远不需要担心绝对路径。这应该在小插图中起作用。请注意,我认为小插图只会使用软件包的安装版本,而不是您可能已在开发环境中加载的版本(具体来说,devtools::load_all() 不会更改用于构建小插图的代码,你必须先install()它)。

最后,使用data()有点老套。 Hadley 和其他人建议使用惰性数据,这样数据会自动出现在命名空间中。在 DESCRIPTION.

中尝试以下操作
LazyData: true
LazyDataCompression: xz