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

时间:2015-10-21 17:40:48

标签: r path package vignette

我正在组装一个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冲突?

1 个答案:

答案 0 :(得分: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") 

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

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

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