소스가 지정되어있을 때 스크립트가 interactive()
을 사용하여 대화식으로 실행되는지 확인하는 스크립트가 작성되었습니다. 대화 형으로 실행되는 경우 명령 줄 인수를 검색하지 않습니다. 그러나 대화식으로 실행되지 않으면 명령 줄 인수를 검색하여 오류가 발생합니다.Rscript는 R 스크립트가 다른 스크립트에서 호출/소스되고 있는지 확인합니다.
일반적으로 정상적으로 작동하지만 때로는 일부 데이터를 처리하기 위해 독립적으로 실행하려는 두 번째 R 스크립트를 작성합니다. 따라서 Script2는 Script1을 소스로 사용하고 Script1은 대화식으로 실행되지 않음을 감지하고 명령 줄 인수를 찾고 오류를 던지기 시작합니다.
interactive()
외에도 스크립트가 해당 컨텍스트를 감지 할 수있는 방법이 있습니까? 예를 들어 직접 실행될 때와 내부 함수 중 하나에 액세스하기 위해로드 될 때 별도의 동작을 원합니다. 패키지를 사용하면 dplyr::arrange()
과 같은 것을 수행하여에 액세스 할 수 있으며 모든 dplyr을로드 할 필요가 없습니다.
편집 : 나의 현재 매우는 janky 해결 기능을 저장 save.image()
를 사용하여 대화 형 세션, 소스 script1이를 시작하고, 다음 Script2에 저장된으로 .rdata 파일을로드 load
를 사용하고있다. 그러나 분명히 이것은 우아한 것이 아닙니다.
나는
이 예제 코드를 박탈 ... 내가 사용하는 정확한 코드가 관련이 있다고 생각하지만, 경우 누군가에 포함하면이 대답하는 것이 중요 느낌하지 않습니다
#!/usr/bin/env Rscript
library(optparse)
function1 <- function(etc,etc) {}
function2 <- function(etc,etc) {}
if(!interactive()) {
# example call
# Rscript create_reference_file.R -c cd4cd8 -o /home/outputfolder/
option_list = list(
make_option(c('-c', '--cell'), type = 'character', default = NULL,
help = 'the name of the cell',
metavar = 'character'),
make_option(c('-o','--outdir'), type = 'character', default = NULL,
help = 'the location where you wish to store your output',
metavar = 'character'),
)
opt_parser <- OptionParser(option_list = option_list)
opt <- parse_args(opt_parser)
function1(opt); function2(opt) # etc etc, I do stuff with the opt inputs
}
는
파이썬의'if __name__ == '__main __':'과 비슷한 것을 찾고 계십니까? – r2evans
(파이썬을 사용하지 않는다면, 참고 문헌에 대한 배경이 있습니다 : https://stackoverflow.com/questions/419163/what-does-if-name-main-do) – r2evans
예! 그것은 기본적으로 (또는 비슷한 결과를 얻을 수있는) 찾고있는 것과 동일한 기능입니다. – Brandon