[command-line] R 스크립트에서 명령 행 매개 변수를 읽으려면 어떻게해야합니까?
코드 자체의 하드 코드 매개 변수 값 대신 여러 명령 줄 매개 변수를 제공 할 수있는 R 스크립트가 있습니다. 스크립트는 Windows에서 실행됩니다.
명령 줄에 제공된 매개 변수를 R 스크립트로 읽는 방법에 대한 정보를 찾을 수 없습니다. 이 작업을 수행 할 수없는 경우 놀라게되므로 Google 검색에서 최상의 키워드를 사용하지 않는 것 같습니다.
어떤 조언이나 권장 사항이 있습니까?
답변
여기 Dirk의 대답 은 필요한 모든 것입니다. 최소한의 재현 가능한 예가 있습니다.
두 개의 파일을 만들었습니다 : exmpl.bat
및 exmpl.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>
간의 차이점 RScript
과 Rterm
:
Rscript
더 간단한 구문이 있습니다Rscript
x64에서 자동으로 아키텍처를 선택합니다 (자세한 내용은 R 설치 및 관리, 2.6 하위 아키텍처 참조)Rscript
options(echo=TRUE)
명령을 출력 파일에 쓰려면 .R 파일에 필요
답변
몇 가지 사항 :
-
를 통해 명령 줄 매개 변수에 액세스 할 수
commandArgs()
있으므로help(commandArgs)
개요를 참조하십시오 . -
Rscript.exe
Windows를 포함한 모든 플랫폼에서 사용할 수 있습니다 . 지원commandArgs()
합니다. 더 작은 것은 Windows로 이식 될 수 있지만 지금은 OS X 및 Linux에서만 작동합니다. -
CRAN에는 getopt 및 optparse의 두 가지 애드온 패키지 가 있으며 모두 명령 줄 구문 분석을 위해 작성되었습니다.
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();
}
답변
답변
때문에 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.txt
23 줄 의 임의의 파일 이 제공됩니다.
명령 행에서 :
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
등을 볼 수 있습니다.