다음은를 사용하여 명령 줄 인수를 처리하는 또 다른 방법 R CMD BATCH
입니다. 여기 에 대한 이전 답변 을 기반으로 한 내 접근 방식을 사용하면 명령 줄에서 인수를 지정하고 R 스크립트에서 일부 또는 전체 기본값을 제공 할 수 있습니다.
다음은 test.R 이라는 이름의 R 파일입니다 .
defaults <- list(a=1, b=c(1,1,1)) ## default values of any arguments we might pass
## parse each command arg, loading it into global environment
for (arg in commandArgs(TRUE))
eval(parse(text=arg))
## if any variable named in defaults doesn't exist, then create it
## with value from defaults
for (nm in names(defaults))
assign(nm, mget(nm, ifnotfound=list(defaults[[nm]]))[[1]])
print(a)
print(b)
명령 줄에서 입력하면
R CMD BATCH --no-save --no-restore '--args a=2 b=c(2,5,6)' test.R
그러면 R 내에 a
= 2
및 b
=가 c(2,5,6)
있습니다. 그러나 나는 말하고 생략 b
하고 다른 주장을 추가 할 수있다 c
.
R CMD BATCH --no-save --no-restore '--args a=2 c="hello"' test.R
그런 다음 R에는 a
= 2
, b
= c(1,1,1)
(기본값) 및 c
=가 "hello"
있습니다.
마지막으로 편의를 위해 환경에주의를 기울이는 한 R 코드를 함수로 래핑 할 수 있습니다.
## defaults should be either NULL or a named list
parseCommandArgs <- function(defaults=NULL, envir=globalenv()) {
for (arg in commandArgs(TRUE))
eval(parse(text=arg), envir=envir)
for (nm in names(defaults))
assign(nm, mget(nm, ifnotfound=list(defaults[[nm]]), envir=envir)[[1]], pos=envir)
}
## example usage:
parseCommandArgs(list(a=1, b=c(1,1,1)))
R CMD BATCH
유물 이라는 인상도 받고 있습니다. 내가 좋아하는 점은.Rout
스크립트 출력뿐만 아니라.R
해당 출력을 생성 한 스크립트 파일 의 입력 명령 / 주석도 포함하는 파일을 생성한다는 것입니다.