2010-05-05 4 views
25

R 환경을 시작할 때 종종 긴 R 스크립트를 실행합니다. Emacs/ESS에서 R 스크립트를로드/실행하고 다른 버퍼에서 다른 작업을 계속할 수 있기를 원합니다.ESS/Emacs에서 R 프로세스의 배경을 어떻게 잡을 수 있습니까?

C-g 또는 C-c C-c를 누르면 프로세스가 중단되고 스크립트를 다시 시작해야합니다.

ESS/Emacs에서 R 프로세스를 배경으로하는 가장 좋은 방법은 무엇입니까?

편집 : 답장과 의견을 보내 주셔서 감사합니다. 그러나 큰 스크립트를로드/실행할 때 버퍼를 변경할 수 없으므로 이맥스가 정지한다는 사실을 언급하지 못했습니다.

제 질문이 좀 더 일반적인 것으로 가정합니다. Emacs가 계속 작업을 진행할 수있는 프로세스를 제공 할 수 있습니까?

+0

스크립트를 실행하려면 C-C C-1을 사용하십시오. –

답변

19

ESS는 R을 비동기 프로세스로 실행합니다. 배경을 찾을 필요가 없습니다. 몇 시간 동안 코드를 실행해도 중단없이 ESS에서 작업 할 수 있습니다.

문제가 다른 것 같습니다. 스크립트를 실행하면 "시각적으로"수행됩니다. 즉, 실행 된 코드가 터미널에 인쇄됩니다. 이로 인해 Emacs가 얼어 붙습니다. 전무 코드의 거대한 덩어리에

설정 ess-eval-visibly은 즉시 R로 전송됩니다 :

(setq ess-eval-visibly nil) 

건배. 'NOWAIT -

[업데이트]

ESS의 최신 버전에서 ess-eval-visibply에 대한 새로운 설정이 있습니다. 하위 버퍼에 코드를 저장 한 다음 하위 프로세스로 보냅니다. 이 방법으로 하위 프로세스가 끝날 때까지 기다리지 않고 나중에 코드와 모든 출력을 볼 수 있습니다.

[/ 업데이트]

+0

만약 당신이 평가할 수없고 emacs lisp를 원하지 않는 다른 환경에 있다면, 함수가 그 결과를 변수에 할당하는 것과 동일한 결과를 얻을 수 있습니다. 'long.running() '대신'res <- long.running()'을 수행하십시오. – Wilduck

+0

작은 업데이트 : ESS 버전 12.09-1부터는'ess-eval-visibly-p'가 이제는 더 이상 사용되지 않습니다. 'ess-eval-visibly'를 사용해야합니다. 참조 : http://ess.r-project.org/Manual/ess.html. – Vince

+0

@Vince thanks. 답변을 업데이트했습니다. – VitoshKa

3

M-x R은 R 세션을 시작합니다 (기본 버퍼 이름은 *R*입니다). M-x R을 다시 누르면 두 번째 R 세션이 시작됩니다 (버퍼 이름은 *R:2*).

각 세션에는 고유 한 R 프로세스가 있으므로 긴 R 스크립트를 하나만 실행하고 나머지는 독립적으로 사용할 수 있습니다.

C-x C-b을 누르면 버퍼 목록이 표시되어 R 세션간에 전환 할 수 있습니다.

또는 당신이 당신의 .emacs 초기화 파일에
(global-set-key "\C-cr" 'ess-request-a-process) 

를 넣어 경우는, 다음마다 당신은 당신이로 전환하고자하는 R 세션 (버퍼)를 입력하라는 메시지가 표시됩니다 C-c r 누릅니다. 세션이 하나만있는 경우 자동으로 전환됩니다.

+0

이미'ess-request-a-process' C-c C-k에 대한 바인딩이 있습니다. 그러나 "R"을 디폴트로 설정해도 일부 독특하고 완전히 알려지지 않은 이유는 기본값이 "S"입니다. – aL3xa

-1

개인적인 경험으로 볼 때, ESS는 아주 큰 스크립트를 다루는 데별로 좋지 않습니다. 때때로 이멕스의 나머지는 사용할 수 없게됩니다. 아마도 ESS에서 개발을 수행 한 다음 BATCH 모드에서 전체 스크립트를 실행하는 것이 더 나을 것입니다.