2017-09-11 3 views
1

R을 사용하여 명령 줄 도구를 만들 때 docopt package을 사용하기로 결정했습니다. 그것은 플래그를 전달하기 위해 작동하지만 두 개의 숫자 값을 전달하는 방법을 알아낼 수 없습니다. 나는 그것이 방법 패키지가로드되는 것을 나에게 경고하고 아무 것도 반환하지 ./test.R -lr 2000 -hr 4000을 사용하여 실행하려고 할 때마다docopt 패키지로 두 개의 숫자 인수를 전달할 수 없음

#! /usr/bin/Rscript 

'usage: ./test.R [-lr <low> -hr <high>] 

options: 
-h --help   Shows this screen 
-lr --low <low>   Passes low risk investiment 
-hr --high <high>  Passes high risk investiment' -> doc 

library(docopt) 
# retrieve the command-line arguments 
opts <- docopt(doc) 
# what are the options? Note that stripped versions of the parameters are added to the returned list 
cat(opts$high) 
cat(opts$low) 
str(opts) 

: 아래 코드를 참조하십시오.

  • 여기에 나의 실수는 무엇입니까?

답변

1

먼저 -h이 두 번 지정됩니다. 한 번은 "도움말"이고 다른 하나는 "높음"이므로 한 번 문제가 발생합니다. 이 문제를 해결하려면 짧은 인수에 대문자를 사용합니다. 둘째, 옵션 인수는 <angular-brackets> 또는 대문자이어야하므로 -lr이 작동하지 않습니다. (분명히 옵션과 인수 사이에는 공백이 필요합니다.) 긴 옵션의 경우와 동일한 명명 된 인수로 확장합니다.

(물론 엄격하게 요구되는 것은 아니지만) 나는 쉼표가 사물을 명확하게하는 데 도움이된다고 생각합니다. . (편집이 :. 분명히 docopt.R은 사용에 선도적 인 ./을 좋아하지 않는다, 그래서 출력을 업데이트 한)

usage: test.R [-L <low> -H <high>] 

options: 
-h, --help     Shows this screen 
-L <low>, --low <low>  Passes low risk investiment 
-H <high>, --high <high> Passes high risk investiment 

(나는 http://docopt.org/에서 docopt에 대한 요구 사항을 발견 나는 그들의 interactive docopt demo 아주 잘되었다 글쎄, 역시.)

+0

철저히 답변 해 주셔서 감사합니다. 그러나 불행히도 작동하지 않으므로 CRAN의 docopt와 함께 R (R 버전 3.4.1)의 버그 여야합니다. –

+1

그래, 원래는 원래의 버전이 호환되지 않는 docopt와 관련된 문제가 아니라 R 구현 (두 버전 모두에 문제가있는 것으로 보임) 문제로 해석했다. 나는 당신이 이미 [버그 리포트] (https://github.com/docopt/docopt.R/issues/32)를 제출했음을 알았습니다. – r2evans

+1

오류를 발견했습니다. docopt의 R 반복은 ./test.R을 사용 섹션에서 처리하지 않는다. 그것은 test.R이어야한다. –