在构建 r 包时附加 python 脚本

Sid*_*per 10 python r devtools reticulate

我还没有找到一些 R 包(没有,相信我)来完成我的任务,但是 python 中有一个。所以我写了python脚本并reticulaye::py_run_file('my_script.py')在一些函数中使用。但在构建和安装后,包找不到该脚本。我应该把这个脚本放在哪里,以便在安装后直接从包中使用它。另一件事,我需要安装 miniconda reticulate::install_miniconda()。有谁知道在 install.package 命令后自动安装它的方法?

Bri*_*ian 16

通常非 R 代码会进入./inst/python/your_script.py(JS 等也同样)。该inst文件夹中的所有内容都将原封不动地安装到包的根目录中。

要在包函数中调用这些文件,请使用以下内容:

reticulate::py_run_file(system.file("python", "your_script.py", package = "yourpkg"))
Run Code Online (Sandbox Code Playgroud)

请参阅: http: //r-pkgs.had.co.nz/inst.html


.onLoad对于第二个问题,您应该在安装任何内容之前提示用户,但您通常会在使用参数libname和调用的特殊函数中调用任何外部安装程序pkgname。这是一个当您调用时自动执行的函数library(yourpkg)

.onLoad <- function(libname, pkgname) {
  user_permission <- utils::askYesNo("Install miniconda? downloads 50MB and takes time")

  if (isTRUE(user_permission)) {
    reticulate::install_miniconda()
    } else {
    message("You should run `reticulate::install_miniconda()` before using this package")
   }
}
Run Code Online (Sandbox Code Playgroud)

您可以将此函数放入任何 R 包文件中。

  • 如果这可能有帮助,就我而言,如果脚本进入 `./inst/python/your_script.py`,那么要调用它,我必须显式包含 python 路径,因此: ```reticulate::py_run_file( system.file("python/your_script.py", package = "yourpkg"))``` (3认同)