R命令行参数和makefile

时间:2012-01-17 14:25:09

标签: r makefile

我在组合makefile和接受命令行参数的R程序时遇到问题 我在编写makefile时非常缺乏经验。

只是为了做一个例子 我写了一个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),以便我可以说 有点像Rplot.pdf -10

我理解它更像是一个makefile问题而不是R问题。

非常感谢任何帮助

此致

Sayan

2 个答案:

答案 0 :(得分:5)

这里有两个问题。

第一个问题是关于命令行参数解析,我们已经在网站上有几个问题。请搜索“[r] optparse getopt”来查找例如。

等等。

第二个问题涉及基本的Makefile语法和用法,是的,网上还有很多教程。你基本上提供它们类似于shell参数。这是例如我的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)

[...]

答案 1 :(得分:2)

您可以按如下方式定义命名参数:

$ cat Makefile 
all:
    echo $(ARG)

$ make ARG=1 all
echo 1
1

您也可以使用Rscript test.R 10代替cat test.R | R --slave --args 10