繁体   English   中英

在软件包安装期间执行 R 脚本

[英]Executing R scripts during package installation

希望这有一个简单的答案,但我还没有找到它。

我正在编写一个 R 包,当安装在 Windows 上时,我希望它执行一个搜索系统文件的脚本,即list.files(path = "C:/Program Files/, ...)然后保存该路径到包目录作为文本文件供以后参考。

我尝试将脚本保存为src/install.libs.R但这阻止了我的包的构建。

如果有替代解决方案,我会尝试保存位于 Program files 目录(某处!)中的 javaw.exe 文件的路径,以便我可以通过system2()在函数中快速调用它。

R 中没有钩子:在安装期间执行代码。

然而,有一整套用于装载或连接包裹的挂钩。 .onLoad()我经常使用.onLoad() 例如,如何RcppGSL会记住链接器和编译标志使用-从R/inline.R

.pkgglobalenv <- new.env(parent=emptyenv())

.onLoad <- function(libname, pkgname) {

    if (.Platform$OS.type=="windows") {
        LIB_GSL <- Sys.getenv("LIB_GSL")
        gsl_cflags <- sprintf( "-I%s/include", LIB_GSL )
        gsl_libs   <- sprintf( "-L%s/lib -lgsl -lgslcblas", LIB_GSL )
    } else {
        gsl_cflags <- system( "gsl-config --cflags" , intern = TRUE )
        gsl_libs   <- system( "gsl-config --libs"   , intern = TRUE )
    }

    assign("gsl_cflags", gsl_cflags, envir=.pkgglobalenv)
    assign("gsl_libs", gsl_libs, envir=.pkgglobalenv)
}

此文件中的下一个是如何使用它们:

LdFlags <- function(print = TRUE) {
    if (print) cat(.pkgglobalenv$gsl_libs) else .pkgglobalenv$gsl_libs
}

CFlags <- function(print = TRUE) {
    if (print) cat(.pkgglobalenv$gsl_cflags) else .pkgglobalenv$gsl_cflags
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM