[command-line] R 스크립트에서 명령 행 매개 변수를 읽으려면 어떻게해야합니까?

코드 자체의 하드 코드 매개 변수 값 대신 여러 명령 줄 매개 변수를 제공 할 수있는 R 스크립트가 있습니다. 스크립트는 Windows에서 실행됩니다.

명령 줄에 제공된 매개 변수를 R 스크립트로 읽는 방법에 대한 정보를 찾을 수 없습니다. 이 작업을 수행 할 수없는 경우 놀라게되므로 Google 검색에서 최상의 키워드를 사용하지 않는 것 같습니다.

어떤 조언이나 권장 사항이 있습니까?



답변

여기 Dirk의 대답 은 필요한 모든 것입니다. 최소한의 재현 가능한 예가 있습니다.

두 개의 파일을 만들었습니다 : exmpl.batexmpl.R.

  • exmpl.bat:

    set R_Script="C:\Program Files\R-3.0.2\bin\RScript.exe"
    %R_Script% exmpl.R 2010-01-28 example 100 > exmpl.batch 2>&1

    또는 다음을 사용하십시오 Rterm.exe.

    set R_TERM="C:\Program Files\R-3.0.2\bin\i386\Rterm.exe"
    %R_TERM% --no-restore --no-save --args 2010-01-28 example 100 < exmpl.R > exmpl.batch 2>&1
  • exmpl.R:

    options(echo=TRUE) # if you want see commands in output file
    args <- commandArgs(trailingOnly = TRUE)
    print(args)
    # trailingOnly=TRUE means that only your arguments are returned, check:
    # print(commandArgs(trailingOnly=FALSE))
    
    start_date <- as.Date(args[1])
    name <- args[2]
    n <- as.integer(args[3])
    rm(args)
    
    # Some computations:
    x <- rnorm(n)
    png(paste(name,".png",sep=""))
    plot(start_date+(1L:n), x)
    dev.off()
    
    summary(x)

두 파일을 모두 같은 디렉토리에 저장하고 시작하십시오 exmpl.bat. 결과는 다음과 같습니다.

  • example.png 약간의 음모와 함께
  • exmpl.batch 다 끝났어

환경 변수를 추가 할 수도 있습니다 %R_Script%.

"C:\Program Files\R-3.0.2\bin\RScript.exe"

배치 스크립트에서 다음과 같이 사용하십시오. %R_Script% <filename.r> <arguments>

간의 차이점 RScriptRterm:

  • Rscript 더 간단한 구문이 있습니다
  • Rscriptx64에서 자동으로 아키텍처를 선택합니다 (자세한 내용은 R 설치 ​​및 관리, 2.6 하위 아키텍처 참조)
  • Rscriptoptions(echo=TRUE)명령을 출력 파일에 쓰려면 .R 파일에 필요

답변

몇 가지 사항 :

  1. 를 통해 명령 줄 매개 변수에 액세스 할 수 commandArgs()있으므로 help(commandArgs)개요를 참조하십시오 .

  2. Rscript.exeWindows를 포함한 모든 플랫폼에서 사용할 수 있습니다 . 지원 commandArgs()합니다. 더 작은 것은 Windows로 이식 될 수 있지만 지금은 OS X 및 Linux에서만 작동합니다.

  3. CRAN에는 getoptoptparse의 두 가지 애드온 패키지 가 있으며 모두 명령 줄 구문 분석을 위해 작성되었습니다.

2015 년 11 월 편집 : 새로운 대안이 나타 났으며 docopt를 진심으로 추천 합니다 .


답변

이것을 스크립트 상단에 추가하십시오.

args<-commandArgs(TRUE)

그럼 당신은로 전달 된 인수를 참조 할 수 있습니다 args[1], args[2]

그런 다음 실행

Rscript myscript.R arg1 arg2 arg3

인수가 공백이있는 문자열 인 경우 큰 따옴표로 묶습니다.


답변

더 좋은 것을 원한다면 library (getopt) …를 사용해보십시오. 예를 들면 다음과 같습니다.

spec <- matrix(c(
        'in'     , 'i', 1, "character", "file from fastq-stats -x (required)",
        'gc'     , 'g', 1, "character", "input gc content file (optional)",
        'out'    , 'o', 1, "character", "output filename (optional)",
        'help'   , 'h', 0, "logical",   "this help"
),ncol=5,byrow=T)

opt = getopt(spec);

if (!is.null(opt$help) || is.null(opt$in)) {
    cat(paste(getopt(spec, usage=T),"\n"));
    q();
}


답변

당신은 필요 의 littler (발음 ‘작은 R’)를

더크는 약 15 분 안에 정교해질 것이다.)


답변

때문에 optparse답변에 몇 번 언급하고 명령 행 처리를위한 포괄적 키트를 제공하고있다, 여기 당신이 입력 파일이 존재하는 가정, 그것을 사용하는 방법에 대한 간단한 간단한 예입니다 :

script.R :

library(optparse)

option_list <- list(
  make_option(c("-n", "--count_lines"), action="store_true", default=FALSE,
    help="Count the line numbers [default]"),
  make_option(c("-f", "--factor"), type="integer", default=3,
    help="Multiply output by this number [default %default]")
)

parser <- OptionParser(usage="%prog [options] file", option_list=option_list)

args <- parse_args(parser, positional_arguments = 1)
opt <- args$options
file <- args$args

if(opt$count_lines) {
  print(paste(length(readLines(file)) * opt$factor))
}

blah.txt23 줄 의 임의의 파일 이 제공됩니다.

명령 행에서 :

Rscript script.R -h 출력

Usage: script.R [options] file


Options:
        -n, --count_lines
                Count the line numbers [default]

        -f FACTOR, --factor=FACTOR
                Multiply output by this number [default 3]

        -h, --help
                Show this help message and exit

Rscript script.R -n blah.txt 출력 [1] "69"

Rscript script.R -n -f 5 blah.txt 출력 [1] "115"


답변

bash에서는 다음과 같은 명령 줄을 구성 할 수 있습니다.

$ z=10
$ echo $z
10
$ Rscript -e "args<-commandArgs(TRUE);x=args[1]:args[2];x;mean(x);sd(x)" 1 $z
 [1]  1  2  3  4  5  6  7  8  9 10
[1] 5.5
[1] 3.027650
$

변수 $z가 “10”으로 bash 쉘로 대체 되고이 값이에 의해 선택되어 commandArgs입력되고 R이 성공적으로 실행 args[2]하는 range 명령 x=1:10등을 볼 수 있습니다.