Совместное использование переменных конфигурации между bash и R - PullRequest
0 голосов
/ 12 марта 2019

Мне нужно разделить конфигурационные переменные между различными программами R и Bash. Все они используют разные ресурсы, особенно базу данных GRASS.

Я начал с создания сценария bash, который устанавливает переменные оболочки, а затем запускает программу R. Таким образом, R не видит переменных оболочки:

$ 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 
  ""   "" 

Затем я попытался использовать функцию readRenviron в R, думая, что ее можно использовать для получения файла 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 поддерживается в некоторой степени на обоих языках, но страдает от одинакового отсутствия средств замены и объединения . Например, с YAML мне нужно будет повторять рабочий каталог бесчисленное количество раз в файле конфигурации.

Итак, вот что я ищу: формат конфигурации, который может использоваться как R, так и bash, а также позволяет объединять переменные.

1 Ответ

2 голосов
/ 12 марта 2019

Я думаю, что все, что вам нужно, это export переменные в bash, чтобы сделать их доступными для R.

$ export TEST_VAR=42
$ Rscript -e "Sys.getenv('TEST_VAR')"
[1] "42"

Тогда конкатенация может быть обработана с помощью paste() или paste0().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...