我正在组装一个R包.我想在插图中显示示例代码,其中示例数据文件(包含在包中)用于生成(示例)输出文件.
我在Hadley Wickham的帖子(http://r-pkgs.had.co.nz/data.html)中阅读了关于使用示例数据的内容,并且相信我应该将我的示例数据保留为原始数据,因为必须将其解析为生成输出.
所以,我在我的包结构中创建了一个目录
/Users/userName/myPackage/inst/extdata/
Run Code Online (Sandbox Code Playgroud)
使用子目录InputFiles和OutputFiles.
我将示例文件(exampleData.csv)放在InputFiles子目录(/ Users/userName/myPackage/inst/extdata/InputFiles)中.
我的小插曲位于:
/Users/userName/myPackage/vignettes/myPackage.Rnw
Run Code Online (Sandbox Code Playgroud)
它包含以下语法:
<<eval=FALSE>>=
fileString = "/Users/userName/myPackage/inst/extdata/InputFiles/exampleData.csv"
doFunction1(fileString)
doFunction2(fileString)
doFunction3(fileString, output ="Users/userName/myPackage/inst/extdata/OutputFiles")
@
Run Code Online (Sandbox Code Playgroud)
我在开发这个插图及其示例数据集时遇到两个问题:
1)我不确定我是否使用extdata文件.根据前面提到的Hadley Wickham参考,这似乎是放置我的示例文件的最佳目录名称和位置.
2)我不确定如何使路径相对而不是绝对,就像我现在所拥有的那样.您可以看到,此示例代码不会自动运行.相反,我把它放在一个Eval = FALSE的R块下,这样就可以简单地列在那里供用户自己测试.运行示例代码后,用户还可以检查输出文件是否确实在(/ Users/userName/myPackage/inst/extdata/OutputFiles)中创建.在遵循示例时,允许用户不必使用绝对路径的最佳方法是什么?是否可以只跟随包目录myPackage中的相对路径?
我的数据文件包含.csv,.htm和.text文件.在过去,在构建包时,我将数据框保存为.rda文件,然后用户可以简单地使用:
data(example.rda)
Run Code Online (Sandbox Code Playgroud)
阅读该文件.他们不必写整个途径.是否有类似的功能可用于读取.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")
Run Code Online (Sandbox Code Playgroud)
使用时devtools,inst会忽略子目录,因此您永远不必担心绝对路径.这应该在一个小插图中工作.请注意,我认为,小插图只使用已安装的软件包版本,而不是您在开发环境中加载的版本(具体而言,devtools::load_all()不会更改用于构建小插图的代码,您必须先使用install()它) .
最后,使用data()有点老式.Hadley和其他人建议使用惰性数据,因此数据会自动出现在命名空间中.请尝试以下内容DESCRIPTION.
LazyData: true
LazyDataCompression: xz
Run Code Online (Sandbox Code Playgroud)