2011-10-16 3 views
13

이것은 매우 기본적인 질문 일지 모르지만 설득력있는 답변을 아직 찾지 못했습니다. R 환경에서 R 스크립트를 실행할 때 source(foo.R) 또는 system("Rscript foo.R") 중 하나를 수행 할 수 있습니다. 두 가지 접근법 사이에 어떤 차이점이 있습니까? 그렇다면 두 가지 접근 방식을 어떻게 비교합니까?Rscript 대 출처 : 주요 차이점은 무엇입니까?

답변

14

그들은 근본적으로 효과가 다릅니다.

  • source("foo.R")"foo.R"로부터 입력을하도록 현재 R 프로세스를 알려줍니다.

  • system("Rscript foo.R")"foo.R"의 콘텐츠가 평가되는 내 별도 R 프로세스를 실행하기 위해 운영 체제 명령을 사용한다.

Rscript 호출은 직접, 전혀 기본적으로 현재의 콘솔에서 다른 R 세션의 출력을 인쇄합니다 제외 을 현재 R 세션에 영향을 미치지 않습니다. (show.output.on.console=FALSE을 설정하여 system() 전화에서이 기능을 사용 중지 할 수 있습니다.)

2

생각해 보면 source(foo.R)은 현재 환경에 해당 파일의 소스 코드 (foo.R)를 포함하고 있습니다. foo.R 내에 변수를 정의한 경우 x <- 5라고 가정하고 현재 프로젝트에서 x <- 6을 미리 정의하면 x5이됩니다.

system("Rscript foo.R")foo.R 인수로 Rscript 프로그램을 실행하므로 현재 환경에는 전혀 영향을 미치지 않습니다.

+0

'sys.source'와 같은 결과를 얻을 수 있습니까? 독립적 인 스크립트 집합을 실행할 때'Rscript '를 사용하는 것이 가장 유용하다는 것을 이해합니다. – Ramnath

+0

'sys.source()'는'source()'와 매우 가깝습니다.'source '도움말 페이지는''능률적 인 버전''sys.source'를 호출합니다. 'sys.source'는 주로'library()'에 의해 사용되도록 설계되었습니다. 덕분에 –

+0

. 이제는 모두 의미가 있습니다. – Ramnath

2

@ Ramnath의 의견에 대한 답변 : sys.source("foo")Rscript foo과 같지 않습니다. 예를 들어, sys.source로 다음을 수행 할 수 당신이 다음에 물건을하고 최종 결과를 반환 여러 중간 개체를 만드는 경우이 작업을 수행 할 수

e <- new.env() 
sys.source("foo", e) # foo creates a bunch of objects in environment e 
z <- with(e, { 
    # do stuff with e.... 
}) 
rm(e) 

합니다. 중간 객체를 유지하고 싶지 않으므로 임시 객체를 임시 환경에 배치하면 한 번에 쉽게 제거 할 수 있습니다.

관련 문제