R аргументы командной строки и makefile - PullRequest
1 голос
/ 17 января 2012

У меня проблема с объединением make-файла и программы R, которая принимает аргументы командной строки. Я очень неопытен в написании make-файлов.

Просто, чтобы подготовить пример, я написал R-файл, который принимает аргумент командной строки и генерируетсюжет.вот мой файл test.R

    args <- commandArgs(trailingOnly=TRUE)
    if (length(args) != 1) {
    cat("You must supply only one number\n")
    quit()
    }
    inputnumber <- args[1]
    pdf("Rplot.pdf")
    plot(1:inputnumber,type="l")
    dev.off()

Теперь вот мой Makefile.

all :
        make Rplot.pdf
Rplot.pdf : test.R
        cat test.R | R --slave --args 10

Теперь вопрос в том, как поставить --args (в нашем случае 10), чтобы я мог сказать, что-то может быть так: make Rplot.pdf -10

Я понимаюбольше вопрос о make-файле, а не вопрос R.

Любая помощь с благодарностью

С уважением,

Саян

Ответы [ 2 ]

5 голосов
/ 17 января 2012

У вас есть два вопроса здесь.

Первый вопрос касается разбора аргументов командной строки, и у нас уже было несколько вопросов по этому поводу на сайте. Пожалуйста, выполните поиск по запросу «[r] optparse getopt», например,

и более.

Второй вопрос касается базового синтаксиса и использования Makefile, и да, в сети также есть множество учебных пособий. И вы в основном предоставляете их аналогично аргументам оболочки. Вот, например, часть моего Makefile (из примеров RInside ), где мы запрашиваем R для флагов командной строки и т. д .:

## comment this out if you need a different version of R, 
## and set set R_HOME accordingly as an environment variable
R_HOME :=       $(shell R RHOME)

sources :=      $(wildcard *.cpp)
programs :=     $(sources:.cpp=)


## include headers and libraries for R 
RCPPFLAGS :=    $(shell $(R_HOME)/bin/R CMD config --cppflags)
RLDFLAGS :=     $(shell $(R_HOME)/bin/R CMD config --ldflags)
RBLAS :=        $(shell $(R_HOME)/bin/R CMD config BLAS_LIBS)
RLAPACK :=      $(shell $(R_HOME)/bin/R CMD config LAPACK_LIBS)

## include headers and libraries for Rcpp interface classes
RCPPINCL :=     $(shell echo 'Rcpp:::CxxFlags()' | \
                           $(R_HOME)/bin/R --vanilla --slave)
RCPPLIBS :=     $(shell echo 'Rcpp:::LdFlags()'  | \
                           $(R_HOME)/bin/R --vanilla --slave)


## include headers and libraries for RInside embedding classes
RINSIDEINCL :=  $(shell echo 'RInside:::CxxFlags()' | \
                            $(R_HOME)/bin/R --vanilla --slave)
RINSIDELIBS :=  $(shell echo 'RInside:::LdFlags()'  | \
                            $(R_HOME)/bin/R --vanilla --slave)

[...]
2 голосов
/ 17 января 2012

Вы можете определить именованные аргументы следующим образом:

$ cat Makefile 
all:
    echo $(ARG)

$ make ARG=1 all
echo 1
1

Вы также можете использовать Rscript test.R 10 вместо cat test.R | R --slave --args 10 .

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