Как определить и вызвать переменную, определенную в Makefile - PullRequest
0 голосов
/ 12 июля 2020

Это может быть что-то тривиальное, но я не знаю, как это сделать. У меня есть make-файл, который включает несколько сценариев R и Bash, которые могут быть вызваны make для выполнения. Я объявляю переменную (project = ABC123) в Makefile и хочу использовать ее в сценариях R & bash, чтобы мне не приходилось объявлять переменную в каждом из сценариев. Я могу сделать это для сценариев Bash, экспортировав переменную и вызвав ее в сценарии bash. Однако я не знаю, как вызвать эту переменную в сценарии R.

Makefile:

project = ABC123
export project
make bashscript_1
make rscript_1

bashscript_1:

cat $project"_SampleList".csv

rscript_1:

read.csv(file = $project"_SampleList".csv)

Скрипт Bash работает, как ожидалось, но скрипт R не распознает переменную, пока я не объявлю ее в этом скрипте. Кто-нибудь может мне помочь? Благодарю за вашу помощь.

Вот мой Makefile и R-скрипт:

Makefile:

VAR=foo
scripts = /data/resources/scripts/

all:
    @Rscript -e 'var<-"${VAR}"' -e "source('foo.R')"

.PHONY: all

foo:
    Rscript $(scripts)foo.R

R-скрипт ( foo.R. Сценарий сохраняется по пути "/ data / resources / scripts /")

print(sprintf("Hello, %s",var))

Я вызываю сценарий R с помощью make foo. Я не внес никаких изменений в то, что вы предложили. Думаю, когда это будет работать, мне будет проще адаптировать его к моим потребностям. Спасибо за помощь.

1 Ответ

0 голосов
/ 12 июля 2020

Makefile:

VAR=foo

all:
    @Rscript -e 'var<-"${VAR}"' -e "source('foo.r')"

.PHONY: all

Rscript может запускать R-скрипты с -e.

Первый -e используется для объявления var переменная (ее значение из Makefile s VAR). Следующие -e загружают основную R программу (foo.r). Если вы используете -e в Rscript, вы не можете запустить R-файл с Rscript foo.r, поэтому вам нужно будет использовать -e source(...).

foo.r:

print(sprintf("Hello, %s",var))

Вывод make:

$ make
[1] "Hello, foo"

Надеюсь понятно :)

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