我需要在各种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都可以使用,并且还允许变量串联。