1 RStudio에 사용하기 좋은 기능 소개

첫 수업은 RStudio를, 정확하게는 IDE에서 받을 수 있는 기능적 혜택들을 소개하려고 합니다.

1.1 RStudio 소개

1.1.1 IDE 란

IDE란 _통합 개발 환경_의 영어 줄임말로 텍스트 편집이외에도 디버깅, 컴파일, 배포등 개발의 위한 기능을 통합적으로 제공하는 프로그램을 지칭합니다. R 또한 개발언어의 일종으로 여러 IDE에서 사용할 수 있게 지원하고 있습니다.

1.1.2 Rstudio

RStudio 홈페이지 RStudio는 R을 처음 배우는 사람이 꼭 사용하는 IDE입니다. 다른 IDE에 비해 R 언어에 특화된 UI와 기능을 가지고 있으며 ggplot2, shiny, dplyr, httr 등 다양항 패키지를 왕성하게 만들고 있는 RStudio 팀이 직접 관리를 하기 때문에 문서도 많고, 우리나라 사용자층도 큰 편입니다. 특히 초보자부터 고급 사용자까지 필요한 많은 기능들을 GUI로 제공해 줘서 배울 수록 편리함이 늘어납니다.

1.1.3 다른 IDE 소개

IDE는 메모장 처럼 가벼운 Sublime Text부터 본격적인 Visual Studio까지 다양합니다. 개발자들이 많이 사용하는 IDE를 몇개 소개하겠습니다.

Sublime Text Sublime Text는 꽤 오랫동안 사랑받은 텍스트 에디터 형 IDE입니다. 몇 가지 설정을 진행하면 R 코드도 실행하게 만들 수 있어 기존 개발자 분들 중 R을 공부하실 때 사용하는 경우가 종종 있습니다.

Atom Atom은 웹기술을 활용해서 어느 컴퓨터에서든 사용할 수 있는 범용성을 가진 IDE입니다. 가장 큰 강점은 plugin 제작이 쉬워서 사용자층이 폭발적으로 늘어나서 최근 많은 개발자들이 사용하고 있습니다. 대부분 웹 개발에 사용되며 오픈소스여서 비용이 발생하지 않는 장점이 있습니다.

Vs Code Vs Code는 Atom의 소스를 사용해서 마이크로소프트에서 수정한 IDE입니다. 여전히 오픈소스이며 큰 기업이 지원하는 만큼 기능 정리를 통한 최적화가 강점입니다. github 연동, 자동 업데이트 등 사용자 편의에 조금 더 중점을 두었습니다.

Nuclide Nuclide도 역시 Atom의 소스를 사용해서 페이스북이 만든 IDE입니다. 역시 오픈소스이며 remote Development를 기본 제공하는 것이 특징입니다. 페이스북 내에서 사용하기 위해 만들어졌다보니 웹개발에 조금더 최적화되어 있습니다.

RTVS 마이크로 소프트가 레볼루션 R을 인수하면서 R 생태계 흡수를 위해 여러 기능들을 지원하는데요. RTVS이 대표적입니다. Visual Studio는 꽤 오랫동안 개발자들이 사용한 IDE입니다. IDE라는 말이 어울리게 수GB의 용량을 차지하고 매우 많은 기능들을 제공합니다. RTVS는 이런 Visual Studio에서 R을 사용할 수 있게 만든 기능으로 무료로 공개한 Visual Studio 2015 커뮤니티 버전에 설치하여 R의 사용환경을 구성할 수 있습니다.

1.2 구조와 기능들

RStudio는 처음부터 R을 지원하기 때문에 설치 이외의 작업을 할 필요 없고, 사용자층이 많아 사용법을 배우기도 좋고 검색도 쉽게 됩니다. 그래서 IDE를 RStudio로 선정하고 기능에 대해 설명하겠습니다. 여기 설명하는 기능은 RStudio만의 기능이 아니며 다른 IDE도 구성에 따라 같은 기능 혹은 더 나은 기능을 사용할 수 있습니다. 실행화면 처음 실행하면 전부 4개면(pane)으로 구성되어 있으며 각부의 이름 은 위 그림과 같습니다. source 창은 코드와 그 순서를 저장하는 script를 보여주는 곳입니다. console 창은 R의 엔진과 대화(!)를 할 수 있는 공간합니다. 명령어를 입력하면, 바로 콘솔창이 대답을 줍니다. console 창에 직접 입력을 해도 되고, source 창의 코드를 여러 방법을 통해서 console 창으로 전달해서 결과를 받을 수 도 있습니다. environment 창(이하 env 창)은 console 창에 입력이 되어서 현재 메모리에 기록되어 있는 상황을 보여주는 곳입니다. R은 변수가 메모리에 저장되어 있는 상태여야만 변수로써 사용할 수 있습니다. 그래서 env 창에서는 그렇게 메모리에 저장되어 있는 변수들의 이름과 내용을 확인할 수 있습니다. help 창은 window 탐색기와 같은 files, 차트 결과를 보여주는 plots, 설치나 불러온 패키지 상태를 보는 packages, 도움말을 보는 help 등 다양한 창으로 구성되어 있습니다.

아래에서 하나하나 중요한 기능을 보겠습니다.

1.2.1 source 창

source창

source창

source 창에서 가장 중요한 기능은 ctrl+enter 입니다. ctrl+enter는 커서가 위치한 줄의 코드를 console 창으로 전달해서 R 엔진이 결과물을 주도록 하는 단축키입니다. 코드를 드래그해서 선택한 만큼의 코드를 실행할 때도 같은 단축키를 사용합니다. File > New File 로 들어가시면 여러 종류의 파일을 만들 수 있는데, 각 파일에 따라 다른 추가 기능들이 나오기도 합니다.

1.2.2 console 창

console창 console 창은 실제로 실행이 이루어지는 곳입니다. 여기서 가장 중요한 것은 아래 보이는 workding directory위치 입니다.

workingdir R도 다른 개발 언어들 처럼 R 엔진이 실행되는 폴더의 위치가 지정되어 있습니다. R 엔진이 실행되는 위치를 workding directory라고 합니다. 그래서 파일을 불러오거나 하는 명령어는 workding directory를 기준으로 실행이 됩니다. 폴더의 위치를 입력하는 양식을 보통 경로라는 단어를 사용하고, 편의에 따라 절대경로상대경로를 사용합니다. workding directory가 문제가 되는 경우는 상대경로일 때 입니다. 상대경로는 . 이라는 표시를 현재 폴더라는 뜻으로 사용합니다. workding directory를 잘 모르고 실행하다 문제가 생기면 가장 해결하기 좋은 방법은 절대경로를 사용하는 것입니다. 혼자 사용하면 문제가 없지만 같이 사용하거나 다른 환경에서 사용해야 할 경우는 매번 경로를 수정해야 되는 문제가 생깁니다. 그렇다면 상대경로로 작성하되 동작방식을 하는게 중요합니다. 보통은 파일을 실행하는 위치로 결정되는데, console의 경우 처음 언어 엔진을 실행한 위치로 결정되기도 합니다. 처음 시작하시는 분들이 크게 하는 실수는 help 창 부분에서 사용하는 files에서 보는 위치로 workding directory가 계속 따라 바뀌는 것으로 오해하는 것입니다. files 창 내에서 실행하는 것 이외의 실행들은 대부분 위 사진의 위치에 있는 workding directory에서 실행된다고 알고 계시는 것이 중요합니다.

1.2.3 environment 창

env창

env창

environment 창은 Environment 창과 History 창, git을 사용한다면 git 창이 보입니다. Build 창이 보일때가 있는데 이것은 package를 만들거나 소스를 가져와 컴파일할 때 사용하는 창으로 사용할 일이 있으시면 R packages을 참고하세요. env 창은 위에서 설명한 것 처럼 메모리에 등록한 변수들을 각 이름과 내용에 대해 간략히 보여줍니다. console 창에 ls()를 입력하면 나타나는 등록된 변수들의 이름과 같습니다. HIstory 창은 console 창에 입력한 순서대로 기록을 해주는 공간입니다. 이 곳에서는 명령어를 클릭한 후 To Console과 To Source를 사용할 수 있습니다. 어떻게 동작하는지는 한번 실행해봐주세요. git 창은 git의 기능을 GUI로 사용할 수 있게 제공합니다. commit, pull, push, log 등의 기능을 사용할 수 있습니다. 다음 장에서 git과 github에 대해 간단히 사용하는 법을 설명드리겠습니다.

1.2.4 help 창

help창 help 창은 다른 곳에 비해 다양한 기능을 수행합니다. files는 윈도우에서의 탐색기와 같이 파일들을 찾아볼 수 있습니다. 조금 불편하긴 하지만 이름 바꾸기, 복사, 이동 등을 할 수 있습니다. 그리고 메모리에 올릴 데이터(csv, xlsx 등)를 왼쪽 클릭하면 아래 화면과 같이 view와 import를 할 수 있습니다. 물론 저는 명령어로 불러오는 것을 권장합니다. gui-import plot 창은 plot과 그 계열의 차트나 그림을 그리는 명령어의 결과물이 표시되는 곳입니다. 전에 그렸던 결과물이 계속 저장되서 전에 그렸던 그림을 다시 볼 수 도 있습니다.

packages 창은 현재 시스템에 설치되어 있는 package들을 리스트로 보여주고, 현재 불러와져서 사용할 수 있는 package들을 체크 박스로 표시해줍니다. install, update 버튼도 있습니다. Packrat은 패키지 의존성 관리 도구로써 패키지들을 프로젝트 별로 독립적으로 관리해서 다른 환경에서 사용할 때 최대한 실행 환경을 유지할 수 있게 도와주는 역할을 합니다.

help 창은 help(함수명), ?함수명 같이 함수의 설명서를 요구하는 명령어를 console 창에 입력했을 때 설명 문서를 보여주는 곳입니다.

각 세부적인 기능에 대해 계속 업데이트 하겠습니다.

1.3 프로젝트와 버전관리

RStudio는 사용 화면에 대화형 console 창을 항상 켜놓고 있는 형태의 IDE 입니다. 그렇다 보니 RStudio에서 직접 프로젝트라는 기능을 제공합니다. 프로젝트란 어떤 분석 프로젝트 단위 하나를 의미하며 그 프로젝트를 관리하는 것을 도와주는 도구들을 제공합니다.

1.3.1 폴더와 프로젝트

가장 간단하게는 .proj 파일을 생성하는 것입니다. 왼쪽 위에 File > New Project > New Diractory > Empty Project 를 선택하신 후 폴더 이름을 입력하고 프로젝트를 만듭니다. proj 그러면 프로젝트 이름과 같은 폴더가 만들어 지고 그 안에 프로젝트이름.porj파일이 함께 생성됩니다. .proj 파일은 Tools > Project Options에서 조절할 수 있는 정보들을 저장하고 있습니다. 그리고 더블 클릭을 통해 프로젝트을 오픈하면서 RStudio를 실행시킬 수 있습니다. 또한 workding directory를 프로젝트 폴더로 자동 지정해 줍니다. 프로젝트 내의 코드 작업물을 모두 상대경로를 편하게 사용할 수 있게 해줍니다. 다른 사람들에게 공유할 때도 폴더 째로 공유하고, .proj파일로 실행하면 다른 곳에서도 어느 정도 코드가 동작하는데 경로나 설정을 걱정하지 않을 수 있습니다.

1.3.1.1 재현성을 위한 패키지 의존성 관리도구 Packrat

각 프로젝트에서 사용하는 패키지를 프로젝트 폴더내에 관리할 수 있게 해줌으로써 더욱 코드 재현성을 보장하는 관리도구입니다. Tools > Project Options 하위에 옵션이 있으며 체크박스를 체크하는 것으로 사용할 수 있습니다. 처음부터 프로젝트를 만들 때 선택할 수도 있습니다. 자세한 안내는 여기를 참고하세요. packrat

1.3.2 버전관리도구 git

1.3.2.1 버전관리도구란

git

git은 현재 개발자들에게 가장 인기있는 버전관리도구 입니다. 버전관리도구란 파일의 변경사항을 저장하는 도구로 word 같은 곳에서 Ctrl+z 같은 것(되돌리기)을 수행하기 위해 변경이 생길때 마다 저장하는 것과 비슷한 기능을 수행합니다. 다른 점이라면 프로젝트와 같이 폴더별로 관리된다는 점, 변경상태에 대해서 추적할 파일을 git에게 알려주는 행위를 해야 한다는 점, 저장을 일부러 해야 한다는 점 정도가 차이점이라고 볼 수 있습니다. 각각 git init, git add, git commit 명령어에 대응되는 개념입니다.

1.3.2.2 git으로 버전 관리하기

gitinit git init은 명령을 실행한 위치의 폴더가 git이 관리하는 프로젝트 폴더임을 선언하는 명령어입니다. 위 그림처럼 .git이라는 폴더가 생기는데 여기에 버전관리를 위한 여러 정보들을 저장합니다. 앞에 .이 붙은 폴더는 unix 계열 OS에서 숨김파일을 뜻하고, 윈도우에서도 숨김 파일 옵션으로 생성됩니다. 숨김 파일을 보는 옵션을 설정하시면 확인하실 수 있습니다. 어쨌든 git을 사용하는 첫번째 방법을 배웠습니다.

1.3.2.3 git이 이해하는 세 가지 상태

git은 폴더 내에 있는 파일들을 전부 3가지 상태로 구분합니다. 그것은 tracked, modified, staged입니다. 각각 살펴보겠습니다.

gitstate

tracked는 말 그대로 파일이 추적되고 있는 상태다라는 뜻합니다. git이 추적할 파일을 지정해 주는 git add [파일 or 폴더명]을 통해 untracked 파일이 tracked 파일로 상태가 변경되고 git의 추적이 시작됩니다. 과거 용량 등의 관리가 중요할 때 의 기능으로 이해하고 있으며 최근의 git을 사용하기 위한 추가적인 지원도구들은 대부분 자동으로 git add .을 진행하여 폴더내의 모든 파일을 계속 tracked 상태를 유지해 줍니다.

tracked 상태의 파일을 수정하면 modified 상태가 됩니다. track 이 시작되면 파일의 track 시작할 때의 상태를 저장해 두는데, 그것과 비교해서 다른 점이 발생하면 modified 상태로 git은 인지하고 있습니다. 하지만 아직 git이 달라진 점을 저장하지 않습니다. 달라진 것만 알고 있는 상태입니다.

modified 상태의 파일은 아직 commit할 수 없습니다. stage 위에 올려서 commit 할 수 있는 상태로 만들어야 합니다. 즉, staged 상태는 commit을 할 대상 파일로 지정되었다는 뜻입니다. commit이란 처음 생성된 상태나 이전 commit된 상태와 현재 상태를 비교해서 달라진 점을 저장하는 것을 뜻합니다. 이 때 git은 달라진 점만 저장합니다. 저장하면서 주석과 같은 기능을 하는 commit message를 작성해 둘 수 있습니다. 이 메세지를 통해서 코드에서 주요하게 달라진 점이 무엇인지를 파악할 수 있습니다.

이렇게 git은 코드의 상태를 정의하고, commit을 통해 변경되는 지점들을 저장합니다. 그럼 git checkout을 이용해 저장된 commit의 위치로 자유롭게 움직일 수 있습니다.

1.3.2.4 로컬과 리모트

git은 협업을 위한 도구이기도 합니다. 그래서 직접 작업하는 프로젝트 공간인 local과 다른 사람들과 공유하기 위한 공동 프로젝트 공간인 remote가 있습니다. 모두 repository(줄여서 repo) 또는 저장소라는 표현을 씁니다. remotegit으로 관리되고 있는 프로젝트가 있다고 생각해 봅시다. 그 remote repo의 주소를 가지고 localgit clone [remote repo 주소]명령어로 복사를 합니다. 그리고 local에서 새로운 파일도 만들고 코드도 작성한 후에 위에서 말한 것 처럼 git add로 파일을 등록하고, git commit을 통해 변경 사항들을 저장합니다. 이제 local에 저장된 변경부분을 remote에 기록을 해야 하는데 git push라고 합니다.

1.3.3 github

github

github은 현재 가장 인기있는 git remote repository service입니다. 많은 분들이 이렇게 헷갈리시는데, github는 정확히 git과 같은 것이 아닙니다. githubgit에서의 remote repo를 저장할 수 있는 공간을 제공하는 서비스입니다. 비슷한 서비스로는 bitbuket, gitlab 등이 있습니다. git과 비슷한 다른 버전관리 도구를 지원하기도 합니다. githubgit과 달리 remote repo끼리 clonepush와 같은 기능을 수행하는 새로운 옵션을 제공합니다. 바로 forkpull request입니다. SNS처럼 좋아요를 의미하는 star도 있습니다. fork는 공유하기와 비슷한데, 자신의 remote repo에 다른 사람의 remote repo를 복사해 오는 것입니다. git clone과 비슷합니다. github내의 remote repo끼리 동작하는 것이기 때문에 remote repolocal repo가 상호작용하는 동작과 다른 명령어를 사용합니다. pull requestfork로 연결되어 있는 remote repo에 자신의 remote repo에 있는 코드를 pull 해가라고 요청하는 것입니다. fork를 한 후 수정한 코드를 원래 주인의 remote repo에 적용하는 것을 요청하는 명령입니다.

위와 같은 과정을 통해 github이 동작합니다. githubgit의 인기와 공개 저장소의 무제한 제공으로 세계에서 가장 인기있는 서비스가 되었고, 대부분의 오픈소스가 저장되고 개발되는 공간이 되었습니다. 오픈소스는 라이선스를 잘 지킨다면 소스코드를 사용해도 좋다고 선언한 코드들입니다. 많은 분들이 자신들의 코드를 공개하고, 결과물을 공유합니다. RStudio 또한 코드github에 공개하고 관리하고 있습니다. RStudio는 조금 복잡한 라이선스로 선언해서 편하게 사용할 수 있는 것은 아니지만 이렇게 코드를 공개하고 라이선스를 선언한 것을 오픈소스라고 합니다.

1.3.4 github과 패키지 생태계

packagerepo R-core 팀이 관리하는 패키지 배포 서버인 cran은 매우 엄격한 패키지 사전 검열을 합니다. 그렇기 때문에 console에서 install.packeges() 한번에 편하게 패키지를 설치하고 사용할 수 있는 것입니다. 최근에는 사전 검열을 통과하기 전 버전의 패키지들이 코드 관리를 위해 github에 저장소를 운영하기도 합니다. github은 인기있는 저장소이기 때문에 구글 검색을 통해 사용자들이 유입되기 좋은 곳입니다. 특히 패키지 운영을 위한 홈페이지, wiki, readme 파일 관리등의 기능을 충분히 지원하는 등 좋은 점이 많습니다. 많은 R 패키지 개발자들도 코드 관리를 github에서 하고 있습니다. 최근에는 개발 버전은 github에, 안정화 버전은 cran에 등록해서 사용할 수 있게 하는 문화가 자리잡혀 있습니다.

1.4 도움말

cran에 등록된 패키지들은 모두 도움말이 충분히 작성되어 있습니다. Vignette라는 세부 패키지 설명이나 아예 블로그 등에서 패키지 사용법이나 작업 순서들을 설명한 패키지도 있습니다. 모두 검색을 통해서 찾아야 되긴 하지만 최소한의 설명서가 내장되어 있으니 그 것을 먼저 확인하는 것이 좋습니다. 도움말은 ?함수명이나 help(함수명)으로 실행할 수 있습니다.

?함수명