[include(틀:프로그래밍 언어)] [[파일:R 로고.svg|width=200]] [목차] == 개요 == {{{> hello <- "Hello, world!" > hello "Hello, world!" }}} [[http://www.r-project.org/|R-project 공식 웹사이트]] [[1992년]] [[뉴질랜드]]에 위치한 [[오클랜드 대학교]]에서 개발된 [[통계]](statistics) 및 그래프 작업을 위한 [[인터프리터|인터프리터 프로그래밍 언어]]이다. R이 가지는 특이사항 중 하나로, color를 colour라고 쓰는 것 또한 인정된다. 영국식 영어를 사용하는 [[뉴질랜드]]에서 개발돼서 얻은 특징인듯. === 다른 프로그래밍 언어 및 통계솔루션과의 비교 === [[SPSS]], [[STATA]], [[SAS(통계)|SAS]] 등 유사 소프트웨어들이 있으며 요즘엔 [[Python]]도 많이 쓴다. SPSS는 통계학용이라는 목적만 같을 뿐 실제로 사용해보면 나머지 언어들과는 좀 다르다. STATA는 R에 비해 프로그래밍 자유도가 낮다는 등의 단점이 있지만, 대신 계량경제학(특히 실증미시경제학)에 특화되고 상대적으로 배우기 쉽다는 장점이 있다. SAS는 유료 통계분석 언어중에 가장 유명한 언어이다.[* 공대에서 매트랩의 위상을 떠올리면 이와 얼추 비슷하다.] 위의 언어들 중 그나마 R에 가장 가깝다고 할 수 있다. Python은 앞의 언어들보다는 좀 더 일반적이고 범용성이 큰 언어이다. 통계나 수치해석을 위한 라이브러리를 동원해 통계분석용으로 쓸 수 있다.[* 예컨대, R의 data.frame을 본떠서 설계한 DataFrame이라는 데이터 구조를 기반으로 만들어진 [[Pandas]] 패키지를 사용한다.] == 특징 == * 변수들이 저장되는 환경이라는 데이터 타입이 있다. * 변수를 선언 및 할당하면 해당 변수가 .GlobalEnv 라는 환경에 생성된다. * 기본적으로 함수의 매개변수로 받는 값은 함수 내부에서 값을 변경하더라도 외부에 반영되지 않는다. 이러한 이유로 일반적으로 함수를 정의하게 되면 순수함수가 되어 Side Effect 를 줄일 수 있다. * 함수를 입력받거나 반환할 수 있어 함수형 프로그래밍을 하기에 용이하다. * assign() 함수를 이용하여 동적으로 원하는 환경에 변수를 생성해낼 수 있으며 이를 이용하여 객체지향 프로그래밍을 구현해낼 수도 있다. * Java, C, PHP 등 다른 프로그래밍 언어와 연결이 용이하고, 윈도우, 맥 OS, 리눅스 및 유닉스 등의 컴퓨터 운영체계를 지원한다. == 장점 == * [[GPL]]로 배포되고 있어 '''무료'''로 사용할 수 있다. [[SPSS]], [[MATLAB]]과 같은 상용 프로그램을 구입하지 않아도 된다. * R에서 사용할 수 있는 수많은 통계 관련 패키지[* 추가 기능이라고 볼 수 있다. R의 내장함수를 사용하는게 아니라 자신이 직접 함수를 만들어야한다거나, 외부 언어나 자료를 끌어온다거나, 복잡한 프로그래밍을 해야할 때가 있다. 이런 작업을 사전에 마친 사람이 자신이 만든 소스를 공개하는 것이라고 보면 된다. 평범한 R 사용자들은 이러한 소스를 받아서 쓴다.]가 개발되어 있어서 [[인터넷]]을 통해 이 패키지들을 설치하는 식으로 무수한 기능 확장이 가능하다. 애초에 [[통계학]]자들이 만들어 낸 언어이며 통계 전문 언어 중 가장 보편적이기 때문에 내가 사용하고 싶은 '''모든 통계 기법이 이미 어딘가에 패키지 형태로 구현되어 있다'''고 봐도 된다. [[https://cran.r-project.org/web/packages/|여기]]서 찾아볼 수 있다.[* [[2018년]] [[4월 22일]] 현재 12,500여개의 패키지가 있다.] * 그래픽 관련 패키지를 설치하면 간단하게 다양한 그래프를 활용할 수 있으며[* 대표적으로 [[https://ggplot2.tidyverse.org|ggplot2]] 패키지가 있다. 사용이 쉽고 굉장히 미려하다.] [[구글]]이나 [[네이버]] 지도를 불러오거나 이를 활용해 GIS 용도로 쓰는 것도 가능하다. * 데이터 클리닝관련 패키지도 다양하게 지원하기 때문에 데이터를 상황에 맞게 자유자재로 다루기가 수월하다. * [[https://rstudio.github.io/reticulate/|reticulate]] 패키지를 이용하여 Python 의 라이브러리들을 쉽게 활용할 수 있다. * 웹 어플리케이션 개발 프레임워크인 Shiny의 고도화로 통계 또는 머신러닝 모델을 웹과 연동할 수 있다. * [[데이터 마이닝]], '''[[빅 데이터 프로세싱]]''', [[기계학습]] 등에 유용하다. * [[리스크]], [[재무]], [[마케팅]] 담당자 채용 시 R 능통자를 우대하기도 한다. * 밑의 단점 단락에 멀티코어 프로세싱을 지원하지 않는다고 쓰여 있지만, [[https://mran.microsoft.com/open/|Microsoft R Open]]을 사용하면 인텔 MKL 라이브러리를 이용해 멀티코어 프로세싱을 사용할 수 있다. 심지어 작업을 자동으로 서로 다른 코어에 할당하기 때문에 따로 코드를 작성할 필요도 없다! 하지만 R 유저들은 CRAN 대신 MRAN을 사용하는 것을 꺼리는 듯. 인텔 CPU가 아닌 경우에는 시스템 환경변수에 MKL_DEBUG_CPU_TYPE을 넣고 값을 5로 설정하면 된다[* [[https://kornfrost.wordpress.com/2020/01/16/r-%EC%86%8D%EB%8F%84-%EC%83%81%EC%8A%B9-in-windows-10/|출처]]]고 한다. * 기본적으로 함수를 통해 외부의 값을 바꾸는 것이 힘들기 때문에 부작용이 없는 코드를 작성하기에 유용하며 [* 물론 assign함수를 이용하면 외부의 값을 자유자재로 바꿀 수 있기는 하다.] 함수도 값처럼 쓸 수 있어 함수형 프로그래밍을 하기에도 좋다. * reticulate 패키지를 이용해 파이썬 패키지를 불러와, R과 함께 병행하여 이용할 수 있다. == 단점 == * 난이도 어렵다. 물론 이것은 컴퓨터 공학자가 아니라 일반인 입장에서 어렵다는 것이다. 해외의 프로그래머 커뮤니티를 둘러봐도 R의 난이도에 대한 악명을 쉽게 찾아볼 수 있다. 이 악명이 나온 이유가 있다. R이 원래 통계 프로그래밍 언어인 S를 그대로 배껴서 만들었기 때문이다.[* R를 S의 구현체 중 하나로 보기도 한다.] 문제는 통계학자들도 R언어를 배워야 하는데, 다양하게 만들고 분석할 수 있는 장점과 프로그래밍을 알아야 한다는 단점을 가지게 되었다. 통계분석 프로그램으로 유명한 SAS, STATA, Minitab에 비하면 월등히 어려워서 한 동안은 대학에서도 취급하지 않았고, 일부 저널에서는 받아주지도 않았다. 2000년대 중후반에 코딩이 중요해지면서, R의 인기가 올라갔다. 인기가 올라간 이유 중 가장 큰 이유는 '공짜'라는 것이다. 통계 분석하는 함수들이 기본적으로 들어가있으면서, 무료로 프로그래밍이 가능하기에 현재 많은 통계분석 프로그램 유일하게 SAS의 명성을 따라잡을 수 있는 언어가 되었다. 이에 따라 R의 인기를 견제하고자 하는 SAS 또한 자사 프로그램을 '''대학'''에 무료 배포를 시작했다.[* 담배회사에서 담배를 훔치는 청소년을 잡지말라는 것처럼, 대학시절부터 SAS에 익숙해져야 사회나가서도 SAS를 찾기 때문. 회사에서 SAS를 쓰려면 정말 비싸게 주고 라이센스를 구매해야한다.] 나이 지긋하신 교수님들은 본인들이 대학원 시절에는 SAS를 통해 배웠기 때문에 그 교수님들 수업을 들으면 SAS를 어느 정도 알아야 이해를 할 수 있는 수업을 하는 경우가 많다.[* 특히 실험계획법이나 회귀분석과 같은 선형모형 수업. 이제 정년을 앞둔 사람 입장에서 이미 수업에서 사용되는 예제들의 코드가 만들어져 있어서 Run 한 번만 누르면 되는데, 굳이 새로운 언어를 배워서 코드를 바꿀 사람은 거의 없기 때문. ~~하지만 [[대학원생]]이 있다면...~~] 반대로 비교적 최근에 임용된 교수님들은 데이터 분석에서 R 또는 Python을 훨씬 더 많이 사용한다. * 프로그래밍 언어로서의 설계 R은 입문자가 배우기에도 쉽지 않은 반면에, 정작 프로그래밍에 숙련된 사람에게도 당혹스러운 측면이 많다. 이는 R의 설계 자체가 일관적으로 통합되지 않았기 때문이다. 예컨대 [[객체 지향 프로그래밍]]을 위한 기본 클래스 종류만 해도 S3 클래스, S4 클래스로 나뉘어져 있으며, 최근에는 R6 패키지를 이용한 R6 클래스가 대두되고 있다.[* R6 패키지는 S3, S4 클래스보다 더 일반적인 객체지향 프로그램을 하기 위해 개발되었다. Perl 의 Moose와 비슷한 측면이 있다.] 이러한 환경에 익숙하지 않은 사람은 객체지향 프로그래밍을 어떤 클래스로 구현할지부터 막막할 수 있다. 대개 다른 프로그래밍 언어에서는 상위 객체에 접근하는 리터럴로 사용되는 "."을 변수 이름에 버젓히 사용할 정도로[* R에서는 "."을 변수 이름으로 사용하는 대신 "$" 이 쓰인다.] 다른 객체지향 프로그래밍 언어와 차이도 크다. * 메모리 큰 데이터 집합을 이용할 때 문제가 발생할 수 있다. 데이터를 물리적 메모리에 저장해야 하기 때문이다. 데이터 뿐만 아니라, 분석할 때 사용하는 모든 '패키지'를 메모리에 저장하면서 사용하기 때문에 큰 메모리가 필요하다. 예로 들면, 몇 기가바이트 급의 데이터를 분석한다면, 패키지에 데이터를 램에 저장한다고 생각하면, 기본 맥북처럼 4GB 램인 컴퓨터는 분석도 제대로 못한다. 때문에 효율이 중시되는 프로젝트에서는 먼저 R로 구현한 후 그걸 [[C언어|C]] 등의 일반 프로그래밍 언어로 포팅하는 경우가 많다. 다른 경우는 복잡한 데이터 작업은 [[C언어|C]] 또는 [[포트란|Fortran(포트란)]]에서 작업시키고 결과만 가져오는 방식을 사용하기도 한다. 다만, 컴퓨터에 장착되는 메모리 용량이 증가함에 따라 이 문제는 점점 개선되고 있다.[* 물론 개선된다기보단 문제시되지 않는 쪽으로 변하는 중이라는 것이다.] * [[정보보호]] 기능 없음 과거에는 R을 백엔드 [[서버]]로 사용하여 계산을 수행하는 것도 불가능했으나, [[아마존닷컴]] 웹 서비스 클라우드 플랫폼에서 가상 컨테이너를 사용하는 등의 기술이 개발되면서 보안 문제는 개선됐다. * 프로그램 자체의 한국어 기능을 제공하지 않는다. 다른 프로그램들마냥 한국어 주석을 생각없이 넣었다가는 코드를 잘 짜놓고도 오류를 뽑아대는 모습을 볼 수 있을 것이다. 특히 함수나 for문 등 연속적인 작업이 이루어지는 코드 내부에 한글로 이루어진 주석을 꽉꽉 채워 넣거나 하지는 말도록 하자. == 통합 개발 환경(IDE) == === R스튜디오 === [[통합 개발 환경]](IDE)으로 RStudio가 가장 무난하다. R 본체가 설치되어 있어야 작동하며, 훨씬 편리한 인터페이스를 제공하는 것이 강점.[[https://www.youtube.com/watch?v=8Oav-J3vcpo&ab_channel=ASDF%EC%98%A4%ED%84%B0%EC%9D%98%ED%86%B5%EA%B3%84|RStudio 설치하는 방법]] 한글등 폭넓은 인코딩및 설정을 지원하므로 안정적이다. 단, 윈도우의 경우 폴더 경로나 파일 이름에 한글이 들어가면 제대로 작동하지 않을 수 있으니 주의할 것. 특히 사용자 계정 이름이 한글일 경우 기본 폴더 경로 자체에 한글이 들어가게 되므로 제대로 실행되지 않을수있다. 이 경우 관리자 권한으로 실행시키면 된다.([[http://www.rstudio.com/|RStudio 홈페이지]]) 당연히 리눅스등 유닉스 계열은 상관없다.[* 디폴트는 UTF-8이므로 MS윈도우에서 작성된 파일을 불러올경우 CP949등의 인코딩 불러오기를 해주면 된다.] RStudio에서 최근에는 Stan, C++, JAVA 등의 코딩도 할 수 있도록 지원하고 있기 때문에 범용성이 커졌다. [[파일:R_studio_screen_windows01.svg|width=500]] === 기타 IDE및 에디터 === 그 외의 IDE나 에디터들에는 다음이 있다. 보통 R에 대한 문법 검사와 코드 색상을 지원하는 플러그인 형태로 제공된다. *ConTEXT *[[이클립스(통합 개발 환경)|Eclipse]] (StatET) *[[Emacs]] (Emacs Speaks Statistics) *LyX (modules for knitr and Sweave) *[[vim]] *jEdit *Kate *Revolution R Enterprise DevelopR (part of Revolution R Enterprise) *[[Sublime Text]] *TextMate *[[Atom(에디터)|Atom]] *WinEdt (R Package RWinEdt) *Tinn-R *[[Notepad++]] *[[IntelliJ IDEA]] *[[Visual Studio]] *[[Visual Studio Code]] [* [[https://marketplace.visualstudio.com/items?itemName=Ikuyadeu.r|R]]와 [[https://marketplace.visualstudio.com/items?itemName=auchenberg.vscode-browser-preview||Browser Preview]]를 VSCode 에 설치하고 [[https://cran.r-project.org/web/packages/httpgd/readme/README.html|httpgd]]를 쓰면 R Studio 못지 않는 환경에서 작업 할 수 있다.] *Architect *RKWard *DataSpell [* 다만 애플 실리콘 베이스의 맥북들에서 "R Wrapper Terminated" 라는 문구와 함께 R 은 실행이 되지 않는다는 보고가 있다 ] 글로벌 프로젝트 답게 File메뉴나 Tools메뉴에서 여러 인코딩을 지원하거나 선택후 바로 열어보기(open)기능이 강화됬다. 심지어는 내부 윈도우의 글자 크기도 별도의 조절이 가능하다. == 시각화 패키지 == 데이터를 그래프 등 보기 좋게 시각화해주는 패키지들 * ggplot2 * ggvis * googleVis * rCharts * ggiraphExtra * plotly * wordcloud == 튜토리얼 == * [[http://www.cookbook-r.com/|R cookbook]]: 요리 레서피 형태로 각 문제마다 해결 방법들을 나열해놓은 책이다. 출판도 되어있지만 온라인 웹페이지 형식으로도 제공되고, pdf도 다운받을 수 있다. 데이터 시각화(visualization) 기능을 위한 R graphics cookbook 역시 pdf로 다운받을 수 있다. == 관련 문서 == * [[통계학]] * [[데이터 마이닝]] * [[빅 데이터 프로세싱]] * [[알고리즘 트레이딩]]: [[미국]] 금융업이나 미국 학계에서는 R로 하는 알고리즘 트레이딩을 가르친다. [[https://book.naver.com/bookdb/book_detail.nhn?bid=12656813|해당 서적이 한국에 번역도 됐다]]. [[분류:프로그래밍 언어]][[분류:1993년 출시]]