먼저 emacs로 작동하는 기본 텍스트를 배워야합니다. emacs는 텍스트와 복사를 간단하게 선택하는 방법을 찾는 것이 매우 정교하므로 어려울 수 있습니다. 따라서 효율적으로 수행하는 방법을 찾는 데 시간을 투자하십시오. 설명서를 읽으면 도움이 될 수 있습니다. Mac OS X의 경우 Aquamacs를 사용하면 기본 단축키를 지원합니다.
ESS에 대한 작업은 R에 대한 작업과 다르지 않습니다. 코드 구성에 대한 동일한 규칙이 적용되어야합니다. 필자의 경우 모든 프로젝트에는 홈 디렉토리에있는 R이라는 상위 디렉토리에있는 자체 디렉토리가 있습니다 (Windows의 경우 모든 소스가있는 디렉토리를 emacs 홈 디렉토리로 지정하는 것이 좋습니다). 따라서 ESS를 사용하여 프로젝트 작업을 할 때 항상 M-x R
시작 디렉토리 내 프로젝트 디렉토리를 선택합니다.
R 프로세스를 시작한 후에는 보통 emacs를 두 개의 창 (emacs 용어)으로 나눕니다. 그런 다음 왼쪽에는 소스 코드가 있으며 오른쪽의 R 프로세스로 보냅니다. 관련 단축키 (emacs 단축키)는 C-x 3
창을 세로로 분할 C-x 1
하고 현재 버퍼를 유일한 창으로 만들고 C-x 2
창을 가로로 분할하기위한 것입니다.
코드를 R로 보낼 때 함수와 R 문을 구분합니다. 나는 보통 모든 파일을 하나의 파일로 유지 하여이 작업을 수행합니다 10code.R
. 그런 다음 load ESS file 옵션 (shortcut C-c C-l
)을 사용하여이 파일을 간단히로드 할 수 있습니다 . 이 접근법의 장점은 모든 기능을 소싱하고 R 버퍼에서 아무것도 생성하지 않는다는 것입니다. 코드에 오류가 있으면 ESS가 미니 버퍼에 메시지를 표시하고 C-c
` 를 눌러 조사 할 수 있습니다 .
다른 코드는 데이터를로드하고 데이터를 정리하고 통계 모델에 적합하며 결과를 검사하고 최종 결과를 생성하는 자체 설명을 유지하려는 R 문입니다. 이 문장의 소스 코드는 프로젝트의 현재 상태입니다. 프로젝트가 완료된 후이 코드로 파일을 소싱하면 프로젝트가 재생산됩니다 (트랙 내역을 추적하기 위해 git도 사용합니다). 이 파일로 작업 할 때 보통 하나의 R 문으로 만 작업합니다.이 문장은 eval 함수, 단락, statement 명령 인 단축키가 R 프로세스로 전송됩니다 C-c C-c
. 이 명령은 단락, 즉 줄 바꾸기로 구분 된 텍스트를 R 프로세스에 보냅니다. R 문을 작업으로 그룹화하고 전체 작업을 R 프로세스로 보낼 수 있으므로 편리합니다. 또한 텍스트를 선택할 필요가 없으므로 매우 편리합니다. 바로 가기C-c C-c
커서를 R 창으로 옮기면 전송 된 R 문의 결과를 즉시 검사 할 수 있다는 이점이 있습니다.
그래서 기본 워크 플로는 창과 버퍼 사이를 많이 이동합니다. 이를 위해 .emacs 파일에서 다음 바로 가기를 사용합니다.
(define-key global-map [f1] 'Control-X-prefix)
(define-key global-map [f3] 'find-file)
(define-key global-map [f2] 'save-buffer)
(define-key global-map [f8] 'kill-buffer)
(define-key global-map [f5] 'switch-to-buffer)
(define-key global-map [f6] 'other-window)
(define-key global-map [f9] 'ess-load-file)
나는 거의 사용하지 f1
않지만 다른 모든 것을 매우 자주 사용합니다. 내가 사용하는 다른 특정 ESS 설정은 다음과 같습니다.
(setq comint-input-ring-size 1000)
(setq ess-indent-level 4)
(setq ess-arg-function-offset 4)
(setq ess-else-offset 4)
이것은 ESS에게 탭을 4 자로 넓게 (기본값은 2) 내 개인 취향으로 만들고 ESS가 기록으로 저장하는 발행 된 명령의 수를 확장합니다.
R 프로세스를 직접 사용하는 경우 다음 단축키가 매우 유용하다는 것을 알았습니다.
(add-hook 'inferior-ess-mode-hook
'(lambda nil
(define-key inferior-ess-mode-map [\C-up] 'comint-previous-matching-input-from-input)
(define-key inferior-ess-mode-map [\C-down] 'comint-next-matching-input-from-input)
(define-key inferior-ess-mode-map [\C-x \t] 'comint-dynamic-complete-filename)
)
)
이것은 R 명령문 히스토리에서 R 명령문을 리콜하지만 이미 라인에있는 R 명령문과 일치 시키려고 시도합니다. 예를 들어 pl
R 프로세스에서 입력 하고 \C-up
(제어 및 위쪽 화살표)를 누르면로 시작하는 모든 문장이 순환 pl
되므로 모든 plot(...
명령을 호출 합니다.
ESS와 함께 사용하는 최종 설정은 다음과 같습니다.
(setq ess-ask-about-transfile t)
이런 식으로 ESS는 항상 R 프로세스를 사용하여 버퍼에 텍스트를 저장할 위치를 묻습니다. 나는 보통 날짜에 따라이 파일들의 번호를 매기므로, 항상 내가하고있는 것을 정확하게 추적 할 수있는 다른 방법이 있습니다. 이 옵션의 유일한 경고는 어떤 이유로 ESS가 R을로드 한 후 R 버퍼를 읽기 전용으로 설정한다는 것입니다 C-x C-q
. 버퍼를 쓰기 가능하게 만드는 바로 가기는 입니다.
ESS로 작업 할 때 사용하는 설정이 마음에 들었습니다. 이미 몇 년 동안 아무것도 추가 할 필요가 없습니다. 처음 사용자에게 ESS를 도입 할 때 나는 일반적으로이 개요를 제공합니다.
나는 Emacs를 사용할 때 가장 많이 사용되는 단축키이며 특히 ESS C-g
는 미니 버퍼에서 명령을 종료하는 최종 단축키로 끝납니다 . 몇 년 동안 나는 Emacs 및 ESS와 함께 일하면서도 내가 원하지 않는 일부 Emacs 명령을 호출 할 수 있으며, C-g
이러한 상황에서 매우 도움이됩니다.