如何解决如何在inst / extdata中使用文件? R程序包检查禁止在R 3.6中使用system.file
我正在编写R包并尝试使用外部文件。我将其放在inst/extdata
中,并使用system.file("extdata","file.csv",package = "mypackage")
将文件加载到函数中。官方手册仅描述了从inst/extdata
获取数据的这种方式。
但是在构建过程中出现错误
ERROR: hard-coded installation path: please report to the package maintainer and use '--no-staged-install'
论坛说system.file()
是不好的做法,但是我应该如何在包中使用行数据?
此问题在2018年更新后发生。我发现我可以在DESCRIPTION文件中使用StagedInstall: no
,但这是作弊的,不是吗?
我想在函数内部使用原始文件(作为预先计算的静态表),并在示例中使用原始文件作为输入文件。我的R版本是3.6.2。
解决方法
发生错误是因为包源代码在安装时执行,而不是在加载包时执行。此外,starting with R 3.6 软件包安装在临时路径中,而不是安装在其实际的最终安装位置。
因此,当直接在文件范围内的包内(即不在函数内)调用时,system.file
将返回虚假路径。这就是您收到的错误消息试图传达的内容。
知道这一点后,解决方案就相当简单了:不要在包构建期间调用 system.file
。相反,在包加载期间调用它;也就是说,在 .onLoad
内:
.onLoad = function (libname,pkgname) {
datafile = system.file("extdata","file.csv",package = "mypackage")
assign('datafile',datafile,envir = topenv())
}
这会导致在您的包命名空间内创建变量 datafile
,您现在可以从其他地方访问它。
论坛说system.file()
是不好的做法
不,使用 system.file
绝对不是不好的做法;相反,需要访问您的包 extdata。不好的做法是在文件范围内调用函数。但是在函数内部调用它是文件。
我发现我可以在描述文件中使用 StagedInstall: no
,但这是作弊,不是吗?
确实,这是“作弊”,绝对不推荐作为适当的解决方案。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。