13

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

我在 Hadley Wickham 的帖子 ( 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 中的冲突吗?

4

1 回答 1

7

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

# 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") 

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

最后,使用data()有点过时。Hadley 和其他人建议使用惰性数据,因此数据会自动出现在命名空间中。在您的DESCRIPTION.

LazyData: true
LazyDataCompression: xz
于 2015-11-06T15:17:24.960 回答