8

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

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

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

如果有替代解决方案,我正在尝试将路径保存到位于 Program files 目录(某处!)中的javaw.exe文件,以便我可以通过system2().

4

1 回答 1

10

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

但是,有一整套用于包裹装载或连接的挂钩。我经常用.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
}
于 2015-08-16T12:44:19.850 回答