1장. 시작하기 전에 — R 소개와 기본 개념
1장. 시작하기 전에 — R 소개와 기본 개념
R을 처음 마주하면 "도대체 이 프로그램은 어디서부터 손대야 하지?"라는 생각이 먼저 드실 거예요. 이 장은 바로 그 첫걸음을 함께하는 자리예요. R이 어떤 철학을 가진 환경인지, 어떤 식으로 명령을 주고받는지, 그리고 작업한 내용이 어떻게 보관되는지를 차근차근 짚어볼게요. 공식 매뉴얼의 첫 장답게 앞으로 계속 등장할 용어와 사용 방식의 뼈대를 세워두는 구간이라, 여기서 감을 잡아두면 이후 내용이 훨씬 편하게 읽혀요.
출처: R 공식 매뉴얼
본문
1.1 R이란 무엇인가 — The R environment
R은 데이터를 다루고, 계산하고, 그래픽으로 표현하기 위한 통합된 소프트웨어 묶음이에요. 구성 요소만 떼어놓고 봐도 아래와 같은 기능들이 한데 모여 있어요.
- 데이터를 효과적으로 다루고 저장하는 기능
- 배열, 특히 행렬(matrix)에서의 계산을 위한 연산자 묶음
- 데이터 분석을 위한, 규모가 크고 짜임새 있으면서도 서로 연결된 중간 도구들의 모음
- 컴퓨터 화면에서 바로, 혹은 종이(hardcopy)로 출력해 쓸 수 있는 데이터 분석·표현용 그래픽 기능
- 조건문, 반복문, 사용자 정의 재귀 함수, 입력·출력 기능을 갖춘, 잘 다듬어져 있고 단순하면서도 효과적인 프로그래밍 언어(S라고 불러요). 사실 시스템이 제공하는 함수 대부분도 바로 이 S 언어로 작성되어 있어요.
여기서 **environment(환경)**이라는 표현을 쓴 데는 이유가 있어요. R은 처음부터 전체를 설계해 일관되게 만든 체계라는 뜻이에요. 다른 데이터 분석 소프트웨어에서 흔히 보이는, 아주 특정하고 융통성 없는 도구들을 조금씩 덧붙여 키워나간 방식이 아니라는 점을 강조하려는 거죠.
R은 새로 개발되는 대화형 데이터 분석 방법론을 실어 나르는 운반체(vehicle) 역할에 가까워요. 빠르게 발전해 왔고, 수많은 패키지가 이 위에 더해졌죠. 다만 R로 작성되는 프로그램 대부분은 본질적으로 임시적이에요. 하나의 데이터 분석을 위해 딱 그때 필요한 만큼만 짜서 쓰는 경우가 훨씬 흔하죠.
1.2 관련 소프트웨어와 문서 — Related software and documentation
R은 Bell 연구소에서 Rick Becker, John Chambers, Allan Wilks가 개발한 S 언어의 구현으로 볼 수 있어요. S-PLUS 체계도 바로 이 S를 기반으로 만들어졌죠.
S 언어의 진화는 John Chambers와 공동 저자들이 쓴 네 권의 책으로 정리할 수 있어요. R의 기본적인 참고서는 Richard A. Becker, John M. Chambers, Allan R. Wilks가 쓴 The New S Language: A Programming Environment for Data Analysis and Graphics예요. 1991년에 공개된 S의 새로운 기능은 John M. Chambers와 Trevor J. Hastie가 엮은 Statistical Models in S에 담겨 있고요. methods 패키지의 형식적 메서드와 클래스는 John M. Chambers의 Programming with Data에 설명된 내용을 바탕으로 해요. 정확한 출처는 본 매뉴얼의 References 항목에서 확인할 수 있어요.
요즘은 R을 데이터 분석과 통계에 활용하는 방법을 설명하는 책도 여럿 나와 있어요. S/S-PLUS용 문서도 대체로 R에서 그대로 쓸 수 있는데, 그럴 때는 S 구현체들 사이의 차이를 염두에 두어야 해요. 더 자세한 내용은 R FAQ의 What documentation exists for R? 항목을 참고하세요.
1.3 R과 통계 — R and statistics
우리가 지금까지 R 환경을 소개하면서 통계 얘기를 꺼내지 않았는데, 사실 많은 사람이 R을 통계 프로그램으로 써요. 다만 R을 "통계 시스템"이라기보다는 고전적·현대적 통계 기법들이 구현되어 있는 환경으로 보는 편이 더 정확해요. 그중 일부는 기본 R 환경에 내장되어 있고, 상당수는 패키지로 제공되죠. R과 함께 배포되는 패키지가 약 25개("standard", "recommended" 패키지라고 불러요) 있고, 그보다 훨씬 많은 패키지가 https://CRAN.R-project.org 를 비롯한 CRAN 계열 인터넷 사이트를 통해 받을 수 있어요. 패키지에 대한 자세한 내용은 뒤의 Packages 장에서 다룰게요.
고전 통계의 대부분과 최신 방법론의 상당수가 R에서 쓰일 준비가 되어 있지만, 사용자가 그걸 찾는 데 약간의 수고를 해야 할 수도 있다는 점은 미리 알아두세요.
S(그래서 R도)가 다른 주요 통계 시스템과 갈리는 철학적 차이가 하나 있어요. S에서는 통계 분석이 보통 일련의 단계로 진행되고, 중간 결과는 **객체(object)**로 저장돼요. 그래서 SAS나 SPSS가 회귀나 판별 분석에서 풍부한 출력을 쏟아내는 반면, R은 아주 간결한 출력만 내놓고 결과를 fit 객체에 담아두어, 이후 다른 R 함수로 다시 물어보는 식으로 활용해요.
1.4 R과 윈도 시스템 — R and the window system
R을 쓰는 가장 편리한 방법은 윈도잉 시스템이 돌아가는 그래픽 워크스테이션에서죠. 이 가이드는 그런 환경을 갖춘 사용자를 대상으로 해요. 중간중간 X 윈도 시스템에서의 사용을 언급하긴 하지만, 여기서 말하는 내용의 압도적 대부분은 R 환경의 어느 구현체에서든 일반적으로 적용돼요.
대부분의 사용자는 때때로 컴퓨터의 운영 체제와 직접 상호작용해야 할 때가 있어요. 이 가이드는 주로 UNIX 머신에서 운영 체제와 상호작용하는 방식을 다루지만, Windows나 macOS에서 R을 돌리고 있다면 아주 작은 수정만으로도 충분해요.
R의 커스터마이즈 기능을 최대한 활용하도록 워크스테이션을 설정하는 일은 어렵지는 않지만 꽤 번거로운 작업이라, 여기서는 다루지 않을게요. 설정에 어려움을 겪는 사용자는 가까운 전문가의 도움을 구하시는 게 좋아요.
1.5 R을 대화형으로 사용하기 — Using R interactively
R 프로그램을 실행하면 명령을 입력받을 때 프롬프트(prompt)를 띄워요. 기본 프롬프트는 >인데, UNIX에서는 셸 프롬프트와 같아서 "아무 일도 안 일어나고 있나?" 싶을 수 있어요. 하지만 조금만 찾아보면 R 프롬프트는 얼마든지 바꿀 수 있어요. 편의상 여기서는 UNIX 셸 프롬프트가 $라고 가정할게요.
UNIX에서 처음 R을 사용할 때 권장하는 절차는 이래요.
- 이 문제에 R을 쓰면서 데이터 파일을 담아둘 별도의 하위 디렉터리(가령
work)를 하나 만들어요. 이 디렉터리가 곧 작업 디렉터리(working directory)가 되어요.
$ mkdir work
$ cd work
- 아래 명령으로 R 프로그램을 시작해요.
$ R
- 이제부터 R 명령을 내리면 돼요 (자세한 내용은 뒤에서 다룰게요).
- R 프로그램을 끝내려면 다음 명령을 써요.
> q()
이 시점에 R 세션이 만든 데이터를 저장할지 물어봐요. 시스템에 따라 대화 상자가 뜨기도 하고, 텍스트 프롬프트가 떠서 yes, no, cancel(첫 글자만 입력해도 충분해요)로 답할 수 있는 경우도 있어요. 각각 저장하고 끝내기, 저장 없이 끝내기, R 세션으로 돌아가기를 뜻하죠. 저장된 데이터는 이후 R 세션에서 다시 쓸 수 있어요.
그다음 세션부터는 아주 단순해져요.
work를 작업 디렉터리로 만들고 아까처럼 프로그램을 시작해요.
$ cd work
$ R
- R을 사용하고, 세션이 끝나면
q()명령으로 종료해요.
Windows에서 R을 쓰는 절차도 기본적으로 같아요. 작업 디렉터리로 쓸 폴더를 하나 만들고, R 바로가기의 Start In 필드에 그 폴더를 지정한 뒤 아이콘을 더블 클릭해서 R을 실행하면 돼요.
1.6 입문 세션 — An introductory session
앞으로 진행하기 전에 컴퓨터 앞에서 R의 느낌을 직접 받아보고 싶은 분은, 부록의 A sample session에 있는 입문 세션을 꼭 한 번 따라 해보시길 권해요.
1.7 함수와 기능에 대한 도움말 얻기 — Getting help with functions and features
R에는 UNIX의 man 시스템과 비슷한 내장 도움말 기능이 있어요. 특정 함수(가령 solve)에 대한 정보를 더 얻고 싶다면 이렇게 입력해요.
> help(solve)
이렇게 써도 돼요.
> ?solve
특수 문자로 이루어진 기능을 찾을 때는 인자를 큰따옴표나 작은따옴표로 감싸서 "문자열(string)"로 만들어야 해요. 문법적 의미를 가진 단어 몇 가지, 가령 if, for, function 같은 경우도 마찬가지예요.
> help("[[")
따옴표는 어느 형태든 서로를 이스케이프하는 데 쓸 수 있어요. 예를 들어 "It's important"처럼요. 이 가이드에서는 관례적으로 큰따옴표를 우선 사용할게요.
대부분의 R 설치 환경에서는 아래 명령으로 HTML 형식의 도움말을 쓸 수 있어요.
> help.start()
이 명령은 하이퍼링크로 도움말 페이지를 탐색할 수 있는 웹 브라우저를 띄워요. UNIX에서는 이후의 도움말 요청이 이 HTML 기반 도움말 시스템으로 전달돼요. help.start()가 띄운 페이지에 있는 Search Engine and Keywords 링크가 특히 유용한데, 사용 가능한 함수들을 검색해주는 상위 개념 목록을 담고 있어서 R이 어떤 것을 제공하는지 그 폭을 빠르게 파악하는 데 큰 도움이 돼요.
help.search 명령(??로도 써요)은 여러 방식으로 도움말을 검색하게 해줘요. 예를 들면,
> ??solve
처럼요. 자세한 내용과 예시는 ?help.search를 확인해보세요.
도움말 주제에 딸린 예시는 보통 다음 명령으로 실행할 수 있어요.
> example(topic)
Windows용 R에는 선택 가능한 다른 도움말 시스템도 있어요. 더 자세한 내용은 다음 명령으로 확인하세요.
> ?help
1.8 R 명령, 대소문자 구분 등 — R commands, case sensitivity, etc.
기술적으로 R은 문법이 아주 단순한 **표현 언어(expression language)**예요. 대부분의 UNIX 기반 패키지처럼 대소문자를 구분해서, A와 a는 서로 다른 기호이고 다른 변수를 가리켜요. R의 이름에 쓸 수 있는 기호의 집합은 운영 체제와 국가(기술적으로는 사용 중인 locale)에 따라 달라져요. 보통은 모든 영숫자 기호2 (지역에 따라 악센트가 붙은 문자를 포함하기도 해요)와 .`(점), `_`(밑줄)을 쓸 수 있는데, 단 이름은 반드시 .이나 문자로 시작해야 하고, ``.으로 시작하면 두 번째 문자는 숫자가 아니어야 해요. 이름 길이에는 사실상 제한이 없어요.
기본 명령(elementary command)은 **표현식(expression)**이거나 **배정(assignment)**이에요. 표현식을 명령으로 주면 그 값이 평가되고, (특별히 보이지 않게 하지 않는 한) 출력된 뒤 그 값은 사라져요. 배정은 표현식을 평가해 그 값을 변수에 넘겨주지만, 결과는 자동으로 출력되지 않아요.
명령은 세미콜론(;)이나 줄바꿈으로 구분해요. 기본 명령들은 중괄호({와 })로 묶어 하나의 복합 표현식으로 만들 수도 있어요. 주석(comment)은 거의 어디에든3 달 수 있는데, 해시 표시(#)로 시작해서 그 줄 끝까지가 주석이 돼요.
명령이 줄 끝에서 끝나지 않고 덜 끝났을 때, R은 다른 프롬프트를 띄워요. 기본적으로 두 번째 줄부터는
+
처럼 나오고, 명령이 문법적으로 완성될 때까지 입력을 계속 읽어요. 이 프롬프트도 사용자가 바꿀 수 있어요. 이 가이드에서는 보통 계속 프롬프트를 생략하고, 단순히 들여쓰기로 계속됨을 표시할게요.
콘솔에 입력하는 명령줄은 약 4095바이트(문자가 아니라 바이트)로 제한돼요.4
1.9 이전 명령 불러오기와 수정 — Recall and correction of previous commands
대부분의 UNIX 버전과 Windows에서 R은 이전 명령을 불러오고 다시 실행하는 기능을 제공해요. 키보드의 위아래 방향키로 명령 히스토리를 앞뒤로 넘길 수 있어요. 이렇게 명령을 찾은 뒤에는 좌우 방향키로 커서를 움직이고, DEL 키로 문자를 지우거나 다른 키로 문자를 추가할 수 있어요. 더 자세한 내용은 뒤의 The command-line editor 장에서 다룰게요.
UNIX에서의 명령 불러오기·편집 기능은 폭넓게 커스터마이즈할 수 있어요. 방법을 알고 싶다면 readline 라이브러리의 매뉴얼 항목을 살펴보세요.
한편, Emacs 텍스트 편집기는 ESS(Emacs Speaks Statistics)를 통해 R과 대화형으로 작업하는 더 일반적인 지원 수단을 제공해요. 자세한 내용은 R FAQ의 R and Emacs 항목을 참고하세요.
1.10 파일에서 명령 실행하고 출력을 파일로 돌리기 — Executing commands from or diverting output to a file
명령5 이 외부 파일에 저장되어 있다면, 가령 작업 디렉터리 work에 있는 commands.R 파일이라면, R 세션 중 언제든 아래 명령으로 실행할 수 있어요.
> source("commands.R")
Windows에서는 File 메뉴에서도 Source를 사용할 수 있어요. sink 함수는,
> sink("record.lis")
이후 콘솔에 나오는 모든 출력을 외부 파일 record.lis로 돌려보내요. 아래 명령은
> sink()
출력을 다시 콘솔로 되돌려줘요.
1.11 데이터의 영속성과 객체 제거 — Data permanency and removing objects
R이 만들고 다루는 실체(entity)를 **객체(object)**라고 불러요. 이 객체는 변수일 수도, 숫자 배열일 수도, 문자열일 수도, 함수일 수도 있고, 그런 구성 요소들로 만들어진 더 일반적인 구조일 수도 있어요.
R 세션 동안 객체는 이름으로 만들어지고 저장돼요 (이 과정은 다음 절에서 다룰게요). R 명령
> objects()
(ls()라고 써도 돼요)은 현재 R 안에 저장된 (대부분의) 객체 이름을 보여줘요. 현재 저장된 객체들의 모음을 **워크스페이스(workspace)**라고 불러요.
객체를 제거하려면 rm 함수를 써요.
> rm(x, y, z, ink, junk, temp, foo, bar)
R 세션 동안 만들어진 모든 객체는 이후 세션에서 쓰도록 파일에 영구 저장할 수 있어요. 각 R 세션이 끝날 때 현재 사용 가능한 객체를 모두 저장할 기회가 주어지는데, 저장하겠다고 하면 객체들은 현재 디렉터리의 .RData6 파일에, 그 세션에서 사용한 명령줄들은 .Rhistory 파일에 각각 기록돼요.
나중에 같은 디렉터리에서 R을 다시 시작하면 이 파일에서 워크스페이스를 다시 불러와요. 그와 동시에 연관된 명령 히스토리도 함께 불러오죠.
R로 분석을 할 때는 가급적 분석마다 별도의 작업 디렉터리를 쓰시길 권해요. 분석 중에 x, y 같은 이름의 객체가 만들어지는 건 아주 흔한 일인데, 그런 이름은 한 분석 안에서는 의미가 분명하지만, 여러 분석을 같은 디렉터리에서 하다 보면 그 객체가 대체 뭘 뜻하는지 판단하기 아주 어려워져요.
더 알아보기
- 이 장에서 처음 등장한
q(),help(), ``?, source(),sink(),objects()/ls(),rm()같은 함수들의 전체 설명은 R 내장 도움말(?함수이름`)에서 바로 확인할 수 있어요. - S 언어의 역사와 관련 서적은 이 장 1.2절에서 인용된 Becker·Chambers·Wilks의 책들을 참고해요.
- 패키지 설치는 뒤의 Packages 장에서, 화면·텍스트 편집 관련 기능은 The command-line editor 장에서 이어서 다룰게요.
- 입문자를 위한 실습은 부록 A sample session에 마련되어 있어요.