명령 줄에서 간단한 플롯을 수행하기위한 R 스크립트가 있으면 매우 편리합니다. 그러나 bash 스크립트에서 R을 실행하는 것은 전혀 편리하지 않습니다. 이상은 다음과 같을 수 있습니다.
#!/path/to/R
...
또는
#!/usr/bin/env R
...
그러나 나는 그 둘 중 하나를 만들 수 없었습니다.
또 다른 옵션은 스크립트를 순전히 R (예 :)로 유지하고 script.R
이를 사용 R --file=script.R
하거나 이와 유사하게 호출하는 것입니다 . 그러나 때때로 스크립트는 코드의 일부가 스크립트 외부에 존재하는 모호한 명령 줄 스위치에 의존합니다. 예 : 로컬 .Rprofile 통해 떠들썩한 파티에서 R로 물건을 몰래 원하는 스위치는 모두가 --vanilla
제외 의미한다 --no-init-file
.
또 다른 옵션은 R 플래그를 저장하고 쉽게 실행할 수있는 bash 스크립트입니다. 그런 다음 R 스크립트를 호출합니다. 문제는 단일 프로그램이 이제 동기화 상태를 유지해야하는 두 개의 파일로 분할되고 함께 새 시스템으로 전송된다는 것을 의미합니다.
내가 현재 가장 경멸하는 옵션은 bash 스크립트에 R을 포함하는 것입니다.
#!/bin/bash
... # usage message to catch bad input without invoking R
... # any bash pre-processing of input
... # etc
R --random-flags <<RSCRIPT
# R code goes here
RSCRIPT
모든 것이 단일 파일에 있습니다. 실행 가능하고 인수를 쉽게 처리합니다. 문제는 bash와 R을 이와 같이 결합하면 IDE가 둘 중 하나에서 실패하지 않을 가능성을 거의 제거하고 내 마음을 아프게 만든다는 것입니다.
내가 놓친 더 좋은 방법이 있습니까?
답변
내용 script.r
:
#!/usr/bin/env Rscript
args = commandArgs(trailingOnly = TRUE)
message(sprintf("Hello %s", args[1L]))
첫 번째 줄은 shebang 줄 입니다. /usr/bin/env Rscript
R 설치 경로를 하드 코딩하는 대신 사용하는 것이 가장 좋습니다 . 그렇지 않으면 다른 컴퓨터에서 스크립트가 손상 될 위험이 있습니다.
다음으로, 실행 가능하게 만드십시오 (명령 줄에서) :
chmod +x script.r
명령 줄에서 호출 :
./script.r world
# Hello world
답변
조금 더 시도하십시오 . littler
GNU R에 대한 해시 뱅 (예 : #! / some / path로 시작하는 스크립트) 기능과 간단한 명령 줄 및 파이핑 사용을 제공합니다.
답변
미구엘 산체스의 반응은 그래야만합니다. Rscript를 실행하는 다른 방법은 시스템 전체 RScript를 실행하는 ‘env’명령 일 수 있습니다.
#!/usr/bin/env Rscript
답변
#!/path/to/R
R 자체가 스크립트이기 때문에 작동하지 않으므로 execve
불행합니다.
나는 사용한다 R --slave -f script
답변
R 스크립트에 대한 명령 줄 인수를 구문 분석하는 데 관심이 있다면 버전 2.5.x부터 R과 함께 번들로 제공되는 RScript를 사용해보십시오.
http://stat.ethz.ch/R-manual/R-patched/library/utils/html/Rscript.html
답변
이것은 작동합니다.
#!/usr/bin/Rscript
하지만 컴퓨터에 R 버전이 두 개 이상 설치되어 있으면 어떻게되는지 모르겠습니다.
이렇게하면
#!/usr/bin/env Rscript
인터프리터에게 경로에서 처음 나타나는 R을 사용하도록 지시합니다.
답변
스크립트를 실행하는 데 사용하는 프로그램에 매개 변수가 필요한 경우 #! 선:
#!/usr/bin/R --random --switches --f
R을 모르면 제대로 테스트 할 수 없지만 작동하는 것 같습니다.
axa@artemis:~$ cat r.test
#!/usr/bin/R -q -f
error
axa@artemis:~$ ./r.test
> #!/usr/bin/R -q -f
> error
Error: object "error" not found
Execution halted
axa@artemis:~$