希望这有一个简单的答案,但我还没有找到它。
我正在编写一个 R 包,当安装在 Windows 上时,我希望它执行一个搜索系统文件的脚本,即list.files(path = "C:/Program Files/, ...)
然后将该路径保存到包目录作为文本文件以供以后参考。
我尝试将脚本另存为src/install.libs.R
但这阻止了我的包裹的建造。
如果有替代解决方案,我尝试保存驻留在程序文件目录(某处!)中的 javaw.exe 文件的路径,以便我可以quickly通过在函数中调用它system2()
.
R 中没有用于此目的的钩子:在安装期间执行代码。
然而,有一整套用于包裹装载或附着的挂钩。我经常使用.onLoad()
为了这。看e.g. how RcppGSL http://dirk.eddelbuettel.com/code/rcpp.gsl.html记住要使用的链接器和编译器标志 - 来自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
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)