我需要在各种R和bash程序之间共享配置变量。它们共享各种资源,尤其是GRASS数据库。
我首先创建了一个bash脚本来设置shell变量,然后运行R程序。这样R对shell变量是盲目的:
$ cat testVars.R
Sys.getenv(c("WDIR","GDIR"))
$ cat testVars.sh
#!/bin/sh
WDIR="/Work/Project/"
GDIR=$WDIR"GRASSDATA"
Rscript testVars.R
$ ./testVars.sh
WDIR GDIR
"" ""
然后我尝试在R中使用readRenviron
函数,认为它可以用于获取设置变量的bash文件。但是,这导致了一个不同的问题,R无法替换和连接像bash这样的变量:
$ cat testVars.R
readRenviron("./testVars.sh")
Sys.getenv(c("WDIR","GDIR"))
$ cat testVars.sh
#!/bin/sh
WDIR="/Work/Project/"
GDIR=$WDIR"GRASSDATA"
$ Rscript testVars.R
WDIR GDIR
"/Work/Project/" "$WDIRGRASSDATA"
YAML在某种程度上受到两种语言的支持,但它受到same lack of replacement and concatenation facilities的影响。例如,对于YAML,我需要在配置文件中无数次重复工作目录。
所以这就是我要找的东西:R和bash都可以使用的配置格式,也允许变量连接。
我认为你所需要的只是在bash中使用export
变量来使它们可以被R访问。
$ export TEST_VAR=42
$ Rscript -e "Sys.getenv('TEST_VAR')"
[1] "42"
然后可以用paste()
或paste0()
处理连接。