Sublime Text 3에서 R 활용하기
데이터노트/분석이야기☆

Sublime Text 3에서 R 활용하기

필자는 최근에 데이터 분석 도구 중 하나인 R에 대해 학습하고 있습니다. R은 데이터 분석과 그래픽을 위한 고급 프로그래밍 언어이자 환경입니다. R은 일반적으로 기본 콘솔 환경에서 사용하거나 R을 효과적으로 프로그래밍할 수 있는 편집기[각주:1]를 사용합니다. 개인적으로 RStudio에서 R 프로그래밍하는 것을 추천하지만, 새로운 프로그램을 설치하고 싶지 않거나 여러 이유로 말미암아 설치할 수 없는 환경에 있을 때에는 다른 방법을 찾아야 합니다.


이 글에서는 현재 개발자에게 많은 사랑을 받고 있는 Sublime Text에 대해 간략히 살펴본 후, Sublime Text에서 R 프로그래밍을 할 수 있는 환경을 구축해 보겠습니다. Sublime Text는 2014년 9월을 기준으로 Sublime Text 2 버전과 Sublime Text 3 버전을 제공하고 있으며, 여기에서는 Sublime Text 3 버전을 기준으로 설명하겠습니다.


About Sublime Text

Sublime Text는 Jon Skinner가 개발한 프로그램으로 C++과 Python으로 만들어진 텍스트 편집기입니다. 쉬운 예로 여러분이 자주 활용하고 있는 메모장과 유사한 프로그램입니다. Sublime Text는 빠르고 가벼우며 뛰어난 확장성을 제공합니다. 이뿐만 아니라, 윈도우, 리눅스, 그리고 맥 OS 등 다양한 플랫폼을 지원하는 매력적인 도구입니다. 필자는 우연히 Sublime Text에 대해 알게 되었는데, 이 프로그램을 알게 된 이후에는 기본 편집기로 사용하고 있습니다.


이 글에서 Sublime Text에 대해 제대로 소개하는 것은 여러 가지 이유로 말미암아 어려울 것 같습니다. 다행히도 Opentutorials.org에서 Sublime Text에 대해 아주 잘 소개해 놓은 강좌가 있으니, Sublime Text에 대해 자세히 알고 싶은 분은 이 링크에서 학습하실 수 있습니다. 


Sublime Text 3에서 R을 사용하기 위한 설정

Sublime Text에서 R을 수행하는 방법은 두 가지가 있습니다. 


이 글에서는 Sublime Text에서 더 효과적으로 R 프로그래밍을 수행할 수 있도록 도움을 주는 SublimeREPL 기반에서 R 프로그래밍을 수행하는 방법을 설명하겠습니다. SublimeREPL은 Sublime Text의 일반 편집기 탭에서 다양한 언어[각주:2]의 대화형 인터프리터[각주:3]를 실행할 수 있도록 제공해주는 플러그인입니다.


기본 환경은 마이크로소프트 윈도우 환경을 기반으로 합니다. Sublime text 3이 설치되어 있고, SublimeREPL이 설치가 되어 있다는 가정하에 설명하겠습니다. SublimeREPL의 설치 방법은 다음 링크에서 확인하실 수 있으며, 간단하게 설치하실 수 있습니다. 


SublimeREPL을 활용하면 편집기에서 작성한 코드를 다음 [그림 1]과 같이 Sublime Text 내에서 검증할 수 있습니다.


[그림 1] Sublime Text 3에서 R Console과 연동


[그림 1]을 보면 상단과 하단에 각각 작업 영역이 배치되어 있음을 확인할 수 있습니다. 상단에는 Sublime Text의 일반 작업 영역이며, 하단의 창은 SublimeREPL R을 연동한 화면입니다. 예상했던 것과 같이 상단에서 입력한 값이 정확하게 R Console에서 수행되는 것을 확인할 수 있습니다.


Setup

SublimeREPL은 기본적으로 R을 지원하기 위한 환경을 내장하고 있지만, R 실행 프로그램의 설치 위치를 알려줘야 합니다. Sublime Text에 이 정보를 알려주는 방법은 다음과 같습니다. 


먼저 Sublime Text의 상위 메뉴(Full-Down Menu)에서 Preferences를 선택합니다. 그 다음 Package Settings를 선택하고, SublimeREPL의 하위 메뉴인 Setting-User를 선택합니다. 기존에 이 영역에 정보를 입력하지 않았으면, 빈 문서가 생성되는 것을 확인할 수 있습니다. 이 영역에 R 실행 프로그램의 설치 경로를 입력해 줍니다. 이때, 주의해야 할 점은 경로를 구분하기 위한 플래그인 역 슬래쉬를 두 번 입력해야 하는 점입니다.

// R Executable File Path { "default_extend_env": {"PATH": "{PATH};C:\\Program Files\\R\\R3.1.1\\bin\\x64"}, "show_transferred_text": true }


파일에 기록되는 내용은 위와 유사할 것입니다. 단, R 실행 프로그램의 위치를 자신의 환경에 알맞게 설정해야 합니다. 경로 하단에 위치한 "show_transferred_text" 명령은 R 콘솔 화면으로 전송하는 정보(위 화면에서는 2+2)도 R 콘솔 화면에서 보고 싶을 때, 수행하는 명령입니다. 만약 이 명령을 설정하지 않으면, R 콘솔 화면에는 사용자가 입력한 명령은 보이지 않고, 결과만 출력됩니다.


단축키 설정하기 (Ctrl+Enter)

기본적으로 SublimeREPL에서 지원하는 단축키가 있습니다. 하지만 개인적으로 사용하기에 조금 불편한 것 같습니다. 하지만 Sublime Text의 강력한 유연성으로 사용자가 원하는 단축키를 설정할 수 있는 옵션이 제공되어 이 문제를 간단하게 해결할 수 있습니다.


단축키를 설정하는 방법은 다음과 같습니다. 이 예제에서는 RStudio에서 한 라인을 입력하는 단축키인 Ctrl+Enter 키의 조합을 등록해 보겠습니다. 먼저 윈도우 탐색기를 실행한 후, Sublime Text가 설치된 위치(예: C:\Program Files\Sublime Text)로 이동합니다. Sublime Text의 하위 폴더인 Data - Packages - SublimeREPL로 이동합니다. 


이 예제를 기준으로 최종 위치는 C:\Program Files\Sublime Text\Data\Packages\SublimeREPL과 같습니다. 이 폴더에 위치한 여러 파일 중 Default (Windows).sublime-keymap 파일을 편집 프로그램을 이용하여 오픈합니다. 이 파일을 오픈하면, 사전에 등록된 키 등이 여러 개 등록되어 있습니다. 


이 파일의 가장 하단으로 이동하면 다음과 같은 내용을 볼 수 있으며, 이 내용을 분석해보면 SublimeREPL 단축키를 등록한 정보임을 확인할 수 있습니다. 

{ "keys": ["ctrl+,", "s"], "command": "repl_transfer_current" , "args": {"scope": "selection"}}, { "keys": ["ctrl+shift+,", "s"], "command": "repl_transfer_current" , "args": {"scope": "selection", "action":"view_write"} }, { "keys": ["ctrl+,", "f"], "command": "repl_transfer_current" , "args": {"scope": "file"} }, { "keys": ["shift+ctrl+,", "f"], "command": "repl_transfer_current" , "args": {"scope": "file", "action":"view_write"} }, { "keys": ["ctrl+,", "l"], "command": "repl_transfer_current" , "args": {"scope": "lines"} }, { "keys": ["shift+ctrl+,", "l"], "command": "repl_transfer_current" , "args": {"scope": "lines", "action":"view_write"} }, { "keys": ["ctrl+,", "b"], "command": "repl_transfer_current" , "args": {"scope": "block"} }, { "keys": ["shift+ctrl+,", "b"], "command": "repl_transfer_current" , "args": {"scope": "block", "action":"view_write"} }


각 옵션에 대해 간략하게 알아보겠습니다. 먼저 "keys"는 단축키 조합을 의미합니다. 두 개의 특수 문자가 사용되고 있는데, '+' 기호는 동시에 입력해야 하는 키 정보를 의미하고, ','는 앞 명령을 실행한 후 입력해야 하는 키 정보를 의미합니다. 예를 들어, ["ctrl+,", "s"]는 먼저 컨트롤(ctrl)키와 콤마(,) 키를 동시에 눌렀다가 뗀 후, "s" 키를 누르는 것을 의미합니다. 다음으로 "command"는 명령을 의미하며, "args"는 다양한 매개변수를 지정할 수 있는데, 이 예제에서는 "scope"만 사용하고 있습니다. "scope"는 명령의 범위를 입력합니다. 예를 들어, "selection"은 선택한 영역을 의미하고, "lines"는 커서가 위치한 현재 라인을 의미합니다. 마지막으로 "action" 키 값의 "view_write"는 명령을 입력하는 단계까지만 수행하라는 의미입니다. Sublime Text에서 Key Map을 설정하는 자세한 방법은 Sublime Text Document를 참조하시기 바랍니다.


지금부터 이 단축키 정보의 상단에 우리가 원하는 Ctrl+Enter 키 조합의 단축키를 등록해 보겠습니다.

// R에서 ctrl+enter 단축키 사용하기 { "keys": ["ctrl+enter"], "command": "repl_transfer_current" , "args": {"scope": "lines"}, "context": [ { "key": "selector", "operator": "equal" , "operand": "source.r", "match_all": true } ] }


앞에서 살펴본 내용보다는 조금 더 복잡해 보입니다. 여기서 중요한 부분은 "operand" 키입니다. "operand" 키는 명령을 수행하는 범위를 지정할 수 있습니다. 이 예제에서는 R 환경에서만 Ctrl+Enter 키를 이 Key Map에서 설정한 방법대로 사용하도록 설정했습니다. 왜냐하면, 일반적으로 Ctrl+Enter 키는 다른 용도로 활용되기 때문입니다.


단축키 명령이 R Console로 전송되지 않을 때, 문제 해결 방법

필자가 Sublime Text에서 R을 이용하기 위해 환경을 구축하면서 가장 문제가 되었던 부분은 키보드 단축키를 등록한 후, 명령이 R Console에 제대로 반영이 안 되는 문제가 있었습니다. 다행히 필자와 유사한 사례가 이전에 보고가 되었고, 해결 방법이 있어 비교적 쉽게 해결할 수 있었습니다.


문제가 발생했을 때, 가장 먼저 해야 할 일은 로그를 확인하는 것입니다. Sublime Text에서 로그를 확인하는 방법은 ctrl+` 키를 누르면 하단에 로그가 출력됩니다.


만약 키보드로 입력한 단축키 명령이 R Console로 전송되지 않는다면, 다음 절차를 따라 수행하면 정상적으로 이용할 수 있습니다. 사례를 살펴보니, Windows 7 64bit 또는 Windows 8 64 bit 환경에서 주로 발생하는 것 같습니다.


먼저 다음 경로(C:\Program Files\Sublime Text\Data\Packages\SublimeREPL\repls)로 이동합니다. 이 폴더 아래에는 다양한 파일이 있습니다. 이 파일에서 "subprocess_repl.py" 파일을 편집 프로그램을 이용하여 오픈합니다[각주:4]


파일 내용을 키워드 "def is_alive(self)"로 검색합니다. 검색 결과 다음과 같은 문장을 만나게 됩니다.

def is_alive(self): return self.popen.poll() is None


기존 문장을 주석 처리하거나 삭제한 후, 다음 문장을 입력합니다. 이 문제와 관련된 논의는 다음 링크에서 찾아볼 수 있습니다.

def is_alive(self): return True


마치면서

지금까지 Sublime Text 3를 환경에서 R 프로그래밍을 수행하는 방법에 대해 간략히 살펴봤습니다. 아직 100% 만족스럽지는 않지만, R 프로그래밍을 하고 간단하게 수행할 정도의 환경은 구축할 수 있었습니다. 이번 기회를 통해 다시 한 번 느낀 점이지만, Sublime Text는 매력적인 도구인 것 같습니다. 


References

Michael J. Crawley, The R Book 2E, Wiley

Wikipedia, Sublime Text, Wikipedia [관련링크]

wojciechBederski, SublimeREPL Document, Readthedocs.org [관련링크]

https://github.com/wuub/SublimeREPL/issues/271

http://www.kevjohnson.org/using-r-in-sublime-text-3/

http://stackoverflow.com/questions/16589353/how-to-pass-a-line-to-the-console-in-sublime-text-2-editor

  1. 일반적으로 Tinn-R과 Rstudio를 많이 활용합니다. [본문으로]
  2. Clojure, CoffeeScript, Node.JS, Pythone, R, Ruby 등 다양한 언어를 지원하며, 사용자가 구성한 명령도 지원합니다. [본문으로]
  3. 예를 들어, 키보드에서 입력을 받는 행위 등을 의미합니다. [본문으로]
  4. 혹시 파일을 잘못 수정할 수도 있으니 미리 백업을 해 놓는 것도 좋은 방법입니다. [본문으로]