我正在编写 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年更新后出现的,我发现可以用StagedInstall: no
在描述文件中,但这是作弊,不是吗?
我想在函数内部使用原始文件(作为预先计算的静态表)并在示例中作为输入文件。我的R版本是3.6.2。
出现这个错误是因为执行包源码在安装时,而不是在加载包时。此外,从 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
绝对是not不良做法;相反,它是required访问您的包扩展数据。不好的做法是在文件范围内调用该函数。但在函数内部调用它就可以了。
我发现我可以使用StagedInstall: no
在描述文件中,但这是作弊,不是吗?
事实上,这是“作弊”,绝对不推荐作为正确的解决方案。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)