R Cookbook by Paul Teetor ⓒ 2012 Insight Press Authorized translation from the English edition of R Cookbook ISBN 9780596809157 ⓒ 2011 Paul Teetor This translation is published and sold by permission of O’ Reilly Media, Inc., the owner of all rights to publish and sell the same. 이 책의 한국어판 저작권은 에이전시 원을 통해 저작권자와의 독점 계약으로 인사이트 출판사에 있습니다. 신저작권법에 의해 한국 내에서 보호를 받는 저작물이므로 무단전재와 무단복제를 금합니다. R Cookbook 초판 1쇄 발행 2012년 7월 10일 지은이 폴 티터 옮긴이 이제원 감수 유충현 펴낸이 한기성 펴낸곳 인사이트 편집 김승호 표 지출력 경운출력 본문출력 현문인쇄 용지 세종페이퍼 인쇄 현문인쇄 제본 자현제책 등록번호 제10-2313호 등록일자 2002년 2월 19일 주소 서울시 마포구 서교동 469-9번지 석우빌딩 3층 전화 02-322-5143 팩스 02-3143-5579 블로그 http://blog. insightbook.co.kr 이메일 [email protected] ISBN 978-89-6626-037-9 책값은 뒤표지에 있습니다. 잘못 만들어 진 책은 바꾸어 드립니다. 이 책의 정오표는 http://www.insightbook.co.kr/r-cookbook에서 확인하실 수 있습니다. 이 도서 의 국립중앙도서관 출판시도서목록(CIP)은 e-CIP홈페이지(http://www.nl.go.kr/ecip)와 국가자료공동목록시스템(http://www. nl.go.kr/kolisnet)에서 이용하실 수 있습니다.(CIP제어번호: CIP2012002933) R 차례 옮긴이의 글................................................................ xii 서문........................................................................ xiv 다른 참고 자료...........................................................xvii 감사의 말................................................................... xx 111시작하기와 도움 얻기 1 1.1 R 다운로드와 설치......................................................2 1.2 R 시작하기...............................................................5 1.3 커맨드 입력하기.........................................................9 1.4 R에서 나가기...........................................................11 1.5 R을 잠깐 중단하기.................................................... 12 1.6 제공된 문서 읽기...................................................... 13 1.7 함수 도움말 보기..................................................... 15 1.8 제공된 문서를 검색하기.............................................. 17 1.9 패키지 도움말 보기................................................... 19 1.10 인터넷 검색으로 도움말 보기...................................... 21 1.11 적절한 함수와 패키지 찾기......................................... 24 1.12 메일링 리스트 검색하기............................................. 25 1.13 메일링 리스트에 질문 보내기. ..................................... 26 222기초 사항들 29 2.1 출력하기................................................................ 29 2.3 변수 목록 보기........................................................ 33 2.4 변수 삭제하기......................................................... 34 2.5 벡터 생성하기.......................................................... 36 2.6 기본적인 통계량 계산하기........................................... 38 2.7 수열 생성하기......................................................... 41 2.8 벡터 비교하기. ........................................................ 42 iv Cookbook R Cookbook 2.9 벡터에 있는 원소 선택하기.......................................... 44 2.10 벡터 연산 수행하기.................................................. 47 2.11 연산자 우선순위 틀리지 않기...................................... 50 2.12 R 함수 정의하기. .................................................... 52 2.13 더 적게 입력하고 많이 얻어내기................................... 54 2.14 흔히 하는 실수....................................................... 57 333R 둘러보기 63 3.1 작업 디렉터리 알아내기와 설정하기................................ 63 3.2 작업 공간 저장하기................................................... 64 3.3 커맨드 히스토리 보기................................................ 65 3.4 이전 커맨드의 결과 저장하기. ...................................... 66 3.5 검색 경로 보기......................................................... 67 3.6 패키지의 함수에 접근하기........................................... 68 3.7 내장된 데이터세트에 접근하기...................................... 70 3.8 설치된 패키지 목록 보기............................................. 72 3.9 CRAN에서 패키지 설치하기......................................... 73 3.10 CRAN 미러 사이트 기본 설정하기................................. 76 3.11 시작 메시지 그만 보기.............................................. 77 3.12 스크립트 실행하기. ................................................. 78 3.13 일괄 실행 스크립트 실행하기...................................... 79 3.14 환경 변수 알아내기와 설정하기................................... 82 3.15 R의 홈 디렉터리 찾아내기.......................................... 83 3.16 R 커스터마이징하기................................................. 84 444입력과 출력 91 4.1 키보드로 데이터 입력하기........................................... 92 4.2 자릿수 더 적게(혹은 더 많이) 출력하기............................ 93 v R 4.3 출력을 파일에 쓰기................................................... 96 4.4 파일 목록 보기........................................................ 97 4.5 윈도에서 나타나는‘Cannot Open File(파일을 열 수 없음)’ 해결하기........................................................................ 98 4.6 고정폭 레코드 읽기................................................... 99 4.7 테이블로 된 데이터 파일 읽기...................................... 101 4.8 CSV 파일에서 읽어오기............................................. 104 4.9 CSV 파일로 쓰기..................................................... 106 4.10 웹에서 테이블 혹은 CSV 데이터를 읽어오기.................... 107 4.11 HTML 테이블에서 데이터 읽어오기. ............................. 108 4.12 복잡한 구조를 가진 파일 읽기.................................... 111 4.13 MySQL 데이터베이스에서 읽어오기.............................. 115 4.14 객체를 저장하고 전송하기........................................ 118 555데이터 구조 121 5.1 벡터에 데이터 추가하기............................................. 130 5.2 벡터에 데이터 삽입하기............................................. 131 5.3 재활용 규칙 이해하기............................................... 132 5.4 요인 생성하기(범주형 변수)........................................ 135 5.5 여러 벡터를 합쳐서 하나의 벡터와 요인으로 만들기. .......... 137 5.6 리스트 생성하기...................................................... 138 5.7 위치로 리스트의 원소 선택하기.................................... 140 5.8 이름으로 리스트의 원소 선택하기................................. 142 5.9 이름/값 연계 리스트 만들기........................................ 144 5.10 리스트에서 원소 제거하기......................................... 146 5.11 리스트의 구조를 없애 벡터로 만들기............................ 147 5.12 NULL 원소를 리스트에서 제거하기.............................. 148 5.13 조건을 사용해 리스트의 원소 제거하기......................... 149 5.14 행렬의 초기 내용 설정하기........................................ 151 5.15 행렬의 연산 수행하기.............................................. 153 5.16 행렬의 행과 열에 친절한 이름 붙이기............................ 153 5.17 행렬에서 하나의 행 또는 열을 선택하기......................... 155 5.18 열 데이터로 데이터 프레임 만들기. .............................. 156 5.19 행 데이터로 데이터 프레임 만들기. .............................. 157 5.20 데이터 프레임에 행 추가하기. .................................... 160 5.21 데이터 프레임 사전 할당하기..................................... 161 5.22 위치로 데이터 프레임의 열 선택하기............................. 163 5.23 이름으로 데이터 프레임의 열 선택하기.......................... 167 vi Cookbook 5.24 더 쉽게 행과 열 선택하기.......................................... 169 5.25 데이터 프레임의 열 이름 바꾸기.................................. 171 5.26 데이터 프레임 편집하기............................................ 172 5.27 데이터 프레임에서 NA 제거하기.................................. 174 5.28 이름으로 열 제외하기.............................................. 175 5.29 데이터 프레임 두 개 합치기....................................... 176 5.30 하나의 공통된 열로 데이터 프레임 병합하기................... 178 5.31 데이터 프레임의 내용에 더 쉽게 접근하기....................... 180 5.32 자료형 변환하기.................................................... 182 5.33 데이터 구조 변환하기.............................................. 183 666데이터 변형 187 6.1 벡터를 여러 집단으로 분할하기.................................... 188 6.2 리스트의 각 원소에 함수 적용하기................................ 190 6.3 모든 행에 함수 적용하기. .......................................... 192 6.4 모든 열에 함수 적용하기........................................... 193 6.5 데이터 집단에 함수 적용하기. ..................................... 196 6.6 행 집단에 함수 적용하기............................................ 198 6.7 병렬 벡터들 또는 리스트들에 함수 적용하기.................... 201 777문자열과 날짜 203 7.1 문자열의 길이 알아내기............................................. 206 7.2 문자열 연결하기..................................................... 206 7.3 하위 문자열 추출하기............................................... 208 7.4 구분자로 문자열 분할하기......................................... 209 7.5 하위 문자열 대체하기............................................... 210 7.6 문자열에서 특수문자 보기......................................... 211 7.7 문자열의 모든 쌍별 조합 만들기.................................. 212 7.8 현재 날짜 알아내기.................................................. 214 7.9 문자열을 날짜로 변환하기......................................... 214 7.10 날짜를 문자열로 변환하기........................................ 215 7.11 연, 월, 일을 날짜로 변환하기..................................... 217 7.12 율리우스력 날짜 알아내기........................................ 218 7.13 날짜의 일부 추출하기.............................................. 219 7.14 날짜로 된 수열 생성하기.......................................... 221 888확률 223 8.1 조합의 개수 세기..................................................... 226 vii R 8.2 조합 생성하기........................................................ 226 8.3 난수 생성하기........................................................ 228 8.4 재현 가능한 난수 생성하기......................................... 230 8.5 확률 표본 생성하기.................................................. 231 8.6 랜덤 수열 생성하기.................................................. 233 8.7 랜덤으로 벡터의 순열 만들기...................................... 234 8.8 이산분포의 확률 계산하기. ........................................ 235 8.9 연속분포의 확률 계산하기. ........................................ 237 8.10 확률을 분위수로 변환하기........................................ 238 8.11 밀도 함수 그래프 그리기.......................................... 240 999일반 통계 245 9.1 데이터 요약 보기..................................................... 248 9.2 상대도수 계산하기. ................................................. 250 9.3 요인의 도수분포표 만들기, 분할표 생성하기.................... 251 9.4 범주형 변수의 독립성 검정하기.................................... 252 9.5 데이터세트의 분위수 및 사분위수 계산하기..................... 253 9.6 역분위수 구하기. .................................................... 254 9.7 데이터를 z 점수로 변환하기........................................ 255 9.8 표본을 이용한 모평균검정(t 검정)................................. 256 9.9 모평균의 신뢰구간 구하기. ........................................ 258 9.10 중앙값에 대한 신뢰구간 구하기.................................. 259 9.11 표본비율을 이용한 모비율 검정 ................................. 260 9.12 모비율의 신뢰구간 구하기........................................ 262 9.13 정규성 검정.......................................................... 263 9.14 런 검정(Testing for runs).......................................... 265 9.15 두 모집단의 평균 비교하기........................................ 266 9.16 비모수적으로 두 표본의 위치 비교하기......................... 268 9.17 모상관계수의 유의성 검정하기................................... 270 9.18 집단들이 동일 비율로 되어있는지 검정하기.................... 272 9.19 집단의 모평균을 쌍별로 비교하기............................... 274 9.20 두 표본이 동일 분포에서 왔는지 검사하기..................... 275 1111그래픽스 277 10.1 산점도 그리기....................................................... 280 10.2 제목과 라벨 추가하기. ............................................ 282 10.3 격자 추가하기....................................................... 284 10.4 여러 집단의 산점도 생성하기..................................... 285 viii Cookbook 10.5 범례 추가하기....................................................... 287 10.6 산점도의 회귀선 그리기. .......................................... 289 10.7 모든 변수들 간 그래프 그리기.................................... 291 10.8 요인 수준별 산점도 하나씩 생성하기. .......................... 292 10.9 막대그래프 그리기.................................................. 294 10.10 막대그래프에 신뢰구간 추가하기............................... 296 10.11 막대그래프 칠하기................................................ 297 10.12 x와 y점으로 선 그리기. .......................................... 300 10.13 선의 유형, 두께, 색상 변경하기.................................. 301 10.14 여러 개의 데이터세트를 그래프로 그리기...................... 303 10.15 수직선 또는 수평선 추가하기................................... 305 10.16 박스플롯 그리기................................................... 306 10.17 각 요인 수준별 박스플롯 하나씩 그리기...................... 307 10.18 히스토그램 그리기................................................ 309 10.19 히스토그램에 추정 밀도 추가하기.............................. 311 10.20 이산 히스토그램 생성하기....................................... 312 10.21 정규분포의 분위수-분위수(Q-Q) 그래프 그리기.............. 313 10.22 다른 분포의 분위수-분위수 그래프 그리기.................... 315 10.23 변수를 다양한 색상으로 그리기. ............................... 317 10.24 함수를 그래프로 그리기. ........................................ 319 10.25 여러 그래프를 그릴 때 일시정지하기........................... 320 10.26 한 페이지에 여러 개 그래프 그리기............................. 321 10.27 그래픽스 창 추가로 열기......................................... 324 10.28 그래프를 파일에 쓰기. ........................................... 325 10.29 그래픽 매개변수 변경하기....................................... 326 1111선형회귀와 분산분석 329 11.1 단순선형회귀 실시하기. ........................................... 332 11.2 다중선형회귀 실시하기. ........................................... 334 11.3 회귀통계량 알아내기............................................... 335 11.4 회귀 모형의 요약 결과 이해하기.................................. 339 11.5 절편이 없는 선형회귀 실시하기................................... 343 11.6 상호작용 항을 넣어 선형회귀 실시하기......................... 345 11.7 최선의 회귀변수 선택하기......................................... 347 11.8 데이터의 부분집합에 대해 회귀분석하기........................ 352 11.9 회귀식 내에 표현식 사용하기..................................... 353 11.10 다항식 회귀분석하기.............................................. 354 11.11 변환된 데이터로 회귀분석하기.................................. 356 ix R 11.12 최적의 거듭제곱 변환 찾기(박스–칵스 절차). ................ 358 11.13 회귀계수의 신뢰구간 구하기..................................... 361 11.14 회귀 잔차 그래프 그리기......................................... 362 11.15 선형회귀 진단하기................................................. 363 11.16 영향력이 큰 관측 판별하기. ..................................... 367 11.17 잔차의 자기상관 검정하기(Durbin–Watson 검정). .......... 368 11.18 새로운 값들 예측하기. ........................................... 370 11.19 예측구간 구하기................................................... 371 11.20 일원분산분석 수행하기........................................... 372 11.21 상호작용 그래프 생성하기....................................... 375 11.22 집단 평균들 간의 차이 알아내기................................ 376 11.23 로버스트 분산분석(Kruskal–Wallis 검정) 수행하기.......... 379 11.24 분산분석을 사용해서 모형 비교하기........................... 381 1111쓸만한 요령들 385 12.1 데이터 조금만 보기................................................. 385 12.2 가로를 넓혀서 출력하기........................................... 386 12.3 대입 결과를 출력하기.............................................. 387 12.4 행과 열 합계 내기................................................... 388 12.5 열의 형태로 데이터 출력하기...................................... 389 12.6 데이터 묶기.......................................................... 390 12.7 특정 값의 위치 찾기................................................ 391 12.8 벡터의 매 n번째 원소 선택하기................................... 392 12.9 원소쌍의 최소 또는 최댓값 찾기................................. 393 12.10 여러 개 요인의 모든 조합 생성하기............................. 395 12.11 데이터 프레임의 구조 없애기..................................... 396 12.12 데이터 프레임 정렬하기........................................... 397 12.13 두 개의 열을 기준으로 정렬하기................................ 399 12.14 변수에서 속성 벗겨내기.......................................... 399 12.15 객체의 구조 알아내기............................................. 401 12.16 코드 시간 재기..................................................... 404 12.17 경고와 에러 메시지 숨기기....................................... 405 12.18 리스트에서 함수 인자 꺼내기.................................... 407 12.19 자신만의 이항 연산자 정의하기................................. 409 1111고급 수치 연산과 통계 411 13.1 단일 매개변수 함수를 최대화 또는 최소화하는 값 찾기...... 411 13.2 다중 매개변수 함수를 최소화 또는 최대화하는 값 찾기. .... 412 x Cookbook 13.3 고유값과 고유벡터 계산하기..................................... 415 13.4 주성분 분석 수행하기.............................................. 415 13.5 단순 직교회귀 실시하기........................................... 417 13.6 데이터에서 군집 찾기. ............................................. 419 13.7 이진값으로 된 변수 예측하기(로지스틱 회귀).................. 423 13.8 통계량 부트스트랩하기............................................ 425 13.9 요인분석............................................................. 428 1111시계열 분석 435 14.1 시계열 데이터 표현하기............................................ 436 14.2 시계열 데이터 그래프로 그리기................................... 440 14.3 가장 오래 전 또는 가장 최근 관측 추출하기................... 442 14.4 시계열 부분집합 만들기........................................... 444 14.5 여러 시계열 병합하기. ............................................. 446 14.6 시계열 끼워 넣기 또는 채우기. ................................... 448 14.7 시계열 늦추기....................................................... 451 14.8 연속차분 계산하기................................................. 452 14.9 시계열 데이터에 계산 수행하기................................... 453 14.10 이동평균 계산하기................................................ 455 14.11 달력 주기로 함수 적용하기...................................... 456 14.12 롤링 함수 적용하기............................................... 458 14.13 자기상관 함수 그리기............................................ 460 14.14 시계열의 자기상관 검정하기..................................... 461 14.15 부분 자기상관 함수 그리기...................................... 463 14.16 두 시계열 사이의 시차상관 찾아내기........................... 464 14.17 시계열의 추세 없애기............................................. 466 14.18 ARIMA 모형 적합시키기.......................................... 468 14.19 유의미하지 않은 ARIMA 계수 제거하기....................... 471 14.20 ARIMA 모형 진단하기............................................ 472 14.21 ARIMA 모형을 통해 예측하기................................... 475 14.22 평균회귀성 검사하기.............................................. 476 14.23 시계열 평활하게 만들기.......................................... 478 찾아보기................................................................... 481 xi R 옮긴이의 글 R을 처음 접한 것은 부끄럽게도 일 년이 채 되지 않았다. 인문학도로 4년을 지낸 뒤에 소셜컴퓨팅 랩으로 석사과정에 진학하게 되면서 넘어야 할 벽이 R과 파이썬이 었다. R은 오픈 소스이기에 무료라는 점, 검색만 잘 한다면 필요한 기능을 누군가 미리 구현해 놓은 패키지를 얼마든지 찾을 수 있다는 점, 그래픽스가 여타 통계 패키지 들보다 잘 발달되어 있다는 점 등이 대표적인 장점으로 꼽힌다. 그러나 사회과학을 하는 사람들은 현재로서는 대개 SPSS나 SAS를 사용하고 있다. 시중에 나와 있는 통계 도서들 또한 SPSS나 SAS를 다루는 것이 대부분이고 말이다. R은 통계 소프트 웨어임에도 오히려 전산학이나 컴퓨터 공학 분야에 더 알려져 있다. 왜일까? 아주 단순한 작업에도 코딩을 해야 하는 인터페이스 탓일 수도 있고, 한 글화가 완전하지 않기 때문일 수도 있으며, 어쩌면 그냥 쓰던 것을 계속 쓰려는 관 성으로 인한 것일 수도 있다. 하지만 첫 대면에서의 낯섦을 극복하고 나면 오히려 다른 소프트웨어보다 더 정이 가는 게 R이다. 이 책은 R을 아예 처음 접하는 사람(누구처럼 인문학도라든지)이라 할지라도 한 단계씩 따라하면서 배울 수 있는 레시피들로 구성되어 있다. 코딩이라고는 생전 해 본 적이 없는 사람의 말이니 믿어도 된다. 이와는 반대로 코딩은 문제 없으나 통계 는 잘 모른다, 하시는 독자들 또한 통계가 등장하는 레시피를 저자가 워낙 상세히 설명하고 있으니 두려워할 필요가 없다. 더욱이 원문에서 설명이 부족하다고 판단 되는 부분에는 감수를 해 주신 유충현 님의 주석이 자리잡고 있어, 궁금증을 해소 하고 상쾌한 마음으로 뒷장으로 넘어갈 수 있다. 본인은 아직도 R을 자유자재로 사용하지는 못한다. 책에 등장하는 내용을 모두 xii Cookbook 빠삭하게 외우고 있지도 않다. 하지만 랩실의 컴퓨터 옆 책장에 두고, ‘아 분명히 책 에 나왔는데!’라는 생각이 들면 책을 뒤져 문제를 해결할 정도는 된다. 아마 그것이 원저자의 의도일 거다. R Cookbook의 번역서가 나오기까지 고생하신 분이 여럿 계신다. 기초 프로그래 밍 지식이 없어 지겹게 질문을 해댔어도 친절하게 답변해 주신 강규영 님, 오타까지 꼼꼼하게 지적해 주시고 옮긴이보다 자세하게 주석을 달아 주신 유충현 님, 바쁘신 와중에도 리뷰 의견을 정리해 보내주신 블로거 NoSyu님께 감사드린다. 첫 번역임 에도 믿고 맡겨주신 인사이트 사장님과 정신없이 줄쳐진 교정지를 받고 당황하셨 을 에디터 김승호 님께도 미안함과 더불어 고마움을 표하고 싶다. 참고로 R의 한글화가 완전하지 않기에 코드는 영문판을 기준으로 했다. 혹시라 도 잘못된 번역이 있다면 모두 옮긴이의 무지 탓인데, 발견한다면 추후에 반영할 수 있도록 꼭 피드백을 보내 주시기를 부탁드린다. 이제원 xiii R 서문 R은 통계, 그래픽 작업, 통계적 프로그래밍을 하는 데에 매우 효과적인 툴이다. 매일 수천, 수만의 사람들이 R을 사용해서 많은 양의 통계 분석을 수행한다. R은 무료 오픈소스 체계라서 똑똑하고 부지런한 많은 사람들의 공동 성취물이다. R에서 사 용할 수 있는 애드온은 2천 개가 넘고, 모든 상업적인 통계 패키지의 강력한 라이벌 이기도 하다. 하지만 R은 여러분을 좌절시킬 수도 있다. 굉장히 많은 과제들이 어떻게 완수해 야 할지 감이 잘 잡히지 않을 것이다. 아주 단순한 것들조차 말이다. 일단 어떻게 하는지를 알게 되면 단순한 과제들은 훨씬 쉬워지겠지만, 그 ‘어떻게’를 배우는 게 미칠 노릇일 수 있다. 이 책에는 사용자가 단계별로 따라하는(how-to) 레시피가 잔뜩 있는데, 각 레시 피는 특정한 문제를 다룬다. 레시피에서는 문제의 해결책에 대한 간단한 소개가 먼 저 나오고, 그 뒤에 해결책을 풀어 놓으면서 그 방법이 어떻게 동작하는지에 대한 이해를‘도와주는 논의’가 뒤따를 것이다. 레시피들은 유용하고 작동도 잘 된다. 나 자신이 사용하니까 잘 안다. 레시피의 범위는 넓다. 입력과 출력, 일반적인 통계학, 선형 회귀로 들어가기에 앞 서 기본 과제부터 시작한다. R을 가지고 그 어떤 대단한 작업을 한다고 해도 여기 서 배운 것들의 일부나 전부를 쓰게 될 것이다. 만약 여러분이 초보자라면 이 책은 공부를 더 빨리 시작하도록 도와줄 것이다. 중급 사용자라면, 이 책은 여러분의 시야를 넓히고 기억을 더듬는 데 유용할 것이다 (“그 정규분포검정(Kolmogorov-Smirnov test)을 어떻게 하더라?”). 이 책은 R의 튜토리얼은 아니다. 여러분이 레시피를 공부하면서 무언가 배우긴 할 테지만 말이다. 레퍼런스 매뉴얼도 아니지만, 도움이 되는 정보를 많이 담고 있 기는 하다. 비록 이 책의 많은 레시피들이 R 스크립트 내에서 유용하다고 해도, R에 서 프로그래밍하는 방법에 대한 책 또한 아니다. 마지막으로, 이 책은 통계 입문서도 아니다. 여기에 실린 많은 레시피들은 여러분 xiv Cookbook 이 그 기저에 깔린 통계적 절차(만약 있다면)에 익숙하며, 그저 그러한 절차가 어떻 게 R에서 사용되는지만 알고 싶어한다는 가정 하에 쓰였다. 레시피 대부분의 레시피는 특정한 문제를 푸는 데에 하나 혹은 두 개의 R 함수를 사용한 다. 모든 함수를 자세하게 설명하지는 않았으며, 주어진 문제를 풀 수 있는 정도로 만 다루었다. 그리고 거의 모든 함수는 본 책에서 언급하는 것 이상의 기능을 가지 고 있고, 그 중에서도 일부는 놀랍다고 할 만한 기능을 가지고 있다. 그러니 함수의 도움말 페이지를 읽을 것을 강력히 권한다. 값진 걸 배울 확률이 꽤 높다. 각각의 레시피는 특정한 문제를 해결하는 하나의 방법을 제시한다. 당연히 각 문 제에서 쓸 만한 해결책은 여러 가지다. 복수의 해결책을 알고 있는 경우에는, 일반 적으로 가장 단순한 것을 골랐다. 여러분도 과제 모두에서 아마 자신만의 대안적인 해결 방법을 여러 개 발견할 수 있을 것이다. 이 책은 조리법(Cookbook)이지, 성경 이 아니다. 특히 R은 말 그대로 수천 개의 애드온 패키지를 다운로드 할 수 있는데, 그중 다 수가 대안으로 사용 가능한 알고리즘 및 통계 방법들을 실행한다. 이 책은 기본적 인 배포판에서 접근할 수 있는 핵심 기능에만 집중하므로, 여러분이 대안적인 해결 방법을 구할 가장 좋은 출처는 애드온 패키지다. (레시피 1.11) 용어에 대한 설명 모든 레시피의 목표는 문제를 푸는 것, 그것도 빨리 푸는 것이다. 따라서 지루하 게 서술하느라 애쓰기보다는, 뜻은 통하지만 엄밀히 말해 정확하지는 않은 용어를 사용하여 설명을 간소화했다. 그 좋은 예가 ‘제네릭 함수’란 용어다. 이 책에서는 print(x)와 plot(x)을 제네릭 함수라고 부르는데, 그 이유는 각 종류를 적절하게 다 루면서 많은 종류의 x에 작동하기 때문이다. 컴퓨터 과학자라면 이 용어를 탐탁치 않아할 텐데, 엄밀히 말해서 이것들은 단순한 ‘함수’가 아니기 때문이다. 동적 디스 패치를 하는 다형 메서드다. 그렇지만 이같이 기술적인 세부 사항들까지 풀어 쓰게 되면, 실제로 제일 중요한 해결 방법들은 묻혀서 보이지 않게 될 것이다. 그래서 이 책에서는 그냥 더 보기 쉽게, 함수라고 부르기로 했다. xv R 또 다른 예는 통계학에서 온 것으로, 통계적 가설 검정(statistical hypothesis testing)을 둘러싼 의미론적인 복잡성 때문이다. 확률 이론에서 쓰는 정확한 용어들 은 몇몇 검정을 실제로 적용할 때 모호하게 받아들여질 여지가 있어, 각각의 통계 검정에 대해 이야기할 때는 조금 더 일상적인 용어를 사용하였다. 레시피에서 가설 검정이 어떤 식으로 사용되는지를 보려면 9장의 ‘들어가며’를 참고하기 바란다. 이 책의 목적은 쉽게 읽히고 형식적이지 않은 글을 통해 더 많은 독자가 R의 힘을 이용할 수 있도록 하는 것이다. 따라서 책에서 종종 공식적이지 않은 용어를 사용 하더라도 각 분야의 전문가들은 양해해 주기를 바란다. 소프트웨어와 플랫폼에 대한 설명 R의 기본 배포판(base distribution)은 정기적으로 예정된 릴리스를 하지만, 언어의 정의와 핵심 구현은 바뀌지 않는다. 이 책의 레시피들은 기본 배포판의 어떠한 최근 릴리스로도 잘 동작해야 한다. 어떤 레시피들은 플랫폼별로 고려해야 할 사항이 있어서 표기해 두었으며, 이러 한 레시피들은 대부분 설치와 환경 설정 같은 소프트웨어 이슈를 다룬다. 내가 아 는 한 다른 모든 레시피들은 윈도, OS X, Linux/Unix 이 세 가지 주요 R 플랫폼에서 잘 작동한다. xvi Cookbook 다른 참고 자료 웹 R에 대한 모든 자료를 가장 많이 싣고 있는 건 R 프로젝트 사이트다(http://www. r-project.org). 여기서 바이너리, 애드온 패키지, 문서, 소스 코드와 기타 다른 것들 을 다운받을 수 있다. R 프로젝트 사이트 다음으로는 R만을 다루는 검색 엔진을 추천한다. 대표적으 로는 Sasha Goodman이 만든 Rseek(http://rseek.org)가 있다. Google 같은 일반 검 색 엔진을 사용해도 되지만, ‘R’이라는 검색어로는 관련 없는 결과가 너무 많이 나 온다. 웹 검색과 관련한 레시피는 1.10를 참고하라. 블로그를 읽는 것도 R을 배우고, 새로 개발되는 것들에 뒤처지지 않는 좋은 방 법이다. R을 다루는 블로그는 엄청나게 많은데, 다음의 두 블로그를 추천한다. Tal Galili의 R-bloggers(http://www.r-bloggers.com/), PlanetR(http://planetr.stderr. org/). 이들의 RSS 피드를 구독하면 수십 개의 웹사이트에서 흥미롭고 유용한 글이 올라왔을 때 알려준다. R 관련 책 R을 가르치는 책은 정말, 정말 많다. 개인적으로 유용하다고 생각하는 책을 몇 권 만 소개하겠다. R 프로젝트 사이트에 방대한 양의 R 관련 책 목록이 있다는 걸 알 아두기 바란다. (http://www.r-project.org/doc/bibs/R-books.html). William Venables가 지은 『An Introduction to R』(Network Theory Limited 출 판사)를 추천한다. 많은 주제를 다루는 책으로, 초보자에게 좋다. CRAN(http:// cran.r-project.org/doc/manuals/R-intro.pdf)에서 무료로 pdf를 다운받을 수도 있지 만, 출판된 책을 구입하면 수익이 R 프로젝트에 기부된다. 오라일리(O’Reilly)에서 출판한 Joseph Adler의『R in a Nutshell』(http://oreilly. com/catalog/9780596801717)은, 옆에 두고 볼만한 짤막한 튜토리얼과 레퍼런스로 구성되어 있다. R Cookbook보다 더 많은 주제를 다룬다. xvii R R로 그래픽 작업을 많이 하는 사람은 Paul Murrell의 『R Graphics』(Chapman & Hall/CRC 출판사)가 도움이 될 것이다. 사용하는 그래픽 패키지에 따라서, Deepayan Sarkar가 쓴 『Lattice: Multivariate Data Visualization with R』(Springer 출판사)과 Hadley Wickham의 『ggplot2: Elegant Graphics for Data Analysis』 (Springer 출판사)도 유용할 것이다. William Venables와 Brian Ripley의 『Modern Applied Statistics with S 4/e』 (Springer 출판사)에서는 R을 사용한 많은 통계 기법을 보여준다. 이 책에서 사용하 는 함수와 데이터 세트들은 Mass 패키지에서 구할 수 있는데, 해당 패키지는 R 기본 배포판에 포함되어 있다. 정기적으로 R 프로그래밍 관련 책이 나오지만, 개인적으로 그리 좋아하는 편은 아 니다. 프로그래밍을 위해서는, William Venables와 Brian Ripley의『R in a Nutshell』과 『S programming』(Springer 출판사)을 추천한다. 또한 R Language Definition(http:// cran.r-project.org/doc/manuals/R-lang.pdf)을 다운로드받는 것도 좋겠다. 통계학 책 R에서 실행된 통계 검정을 정확하게 해석하려면 쓸만한 통계학 교과서나 참고 서적 이 필요할 것이다. 여기서 어느 한 가지를 꼽기에는 괜찮은 책이 너무 많다. 통계를 배우는 데에는 John Verzani의 『Using R for Introductory Statistics』 (Chapman & Hall/CRC 출판사)도 훌륭한 방편이다. 이 책은 통계학과 R을 같이 다 루면서 통계적 방법을 적용하는 데 필요한 컴퓨터 기술을 가르쳐 준다. 통계학 책 저자들은 방법론을 설명할 때 점점 더 R을 사용하는 추세이다. 만약 여 러분이 어떤 전문 분야에서 일을 한다면, R 프로젝트의 참고 문헌 목록(http://www. r-project.org/doc/bib/R-books.html)에서 쓸모 있는 관련 서적을 찾을 수 있을 것이다. 일러두기 이 책에서는 다음과 같은 표기가 사용되었다: constant width(고정폭 글꼴) 소스 코드(program listing) constant width bold(고정폭 글꼴 볼드체) 커맨드 혹은 사용자가 완전히 타이핑해야 하는 텍스트 xviii Cookbook 팁, 제안, 아니면 일반적인 주석 주의해야 할 부분 예제 코드를 사용하는 경우 이 책은 여러분을 도와주기 위해 쓰였다. 일반적인 경우 이 책에 있는 코드는 프로 그램과 문서에서 사용할 수 있다. 코드의 대부분을 복제하는 것이 아니라면, 허락 을 받기 위해 따로 연락하지 않아도 된다. 예를 들면, 이 책에 나온 코드 몇 덩어리 를 프로그램에 사용하는 건 허락을 구하지 않아도 된다는 뜻이다. 하지만 O’Reilly 책들의 예제로 만든 CD-ROM을 팔거나 재배포하는 행동은 허가를 받아야 한다. 반면에 이 책을 인용해서 질문에 답을 하거나, 예제의 코드를 인용할 때에는 허가가 필요 없다. 또한 이 책에서 많은 양의 예제 코드를 가져다가 여러분 제품의 문서에 포함시키는 것도 허가가 필요하지 않다. 저작자 표시를 해 주시면 감사하나, 필수는 아니다. 저작자 표시는 보통 제목, 저자, 출판사, ISBN을 포함하면 된다. 예:“Paul Teetor의 R Cookbook. Copyright 1 2011 Paul Teetor, 978-596-80915-7.” 만약 여러분이 예제 코드를 사용하기가 꺼림칙하다거나 방금 설명한 허가 범위 를 벗어났다고 생각한다면, [email protected]으로 연락주시기 바란다. 연락 방법 이 책(원서)의 웹 페이지에 오탈자, 예제, 추가 정보를 올려둔다. 해당 페이지는 다음 과 같다. http://www.oreilly.com/catalog/97805968091572 1 (옮긴이) 번역서 정보를 같이 표시해주시면 감사하겠다. 2 (옮긴이) 번역서 정보를 올려둔 웹페이지는 다음과 같다. http://www.insightbook.co.kr/r-cookbook xix R 감사의 말 R 커뮤니티 전반과 특히 R Core Team에 감사를 전합니다. 지대한 공헌을 해 주셨 습니다. 이 사람들의 작업 덕에 통계학이라는 세계가 많은 혜택을 입었습니다. 기술 검토를 해 주신 James D. Long, Timothy McMurry, David Reiner, Jeffery Ryan, John Verzani 께도 감사 말씀을 드립니다. 본문 지적을 해준 Joe Adler 님 감 사합니다. 위 사람들의 피드백 덕에 이 책의 질, 정확성 그리고 유용성을 무척 높일 수 있었습니다. 제가 얼마나 멍청한지 온 세상에 광고할 뻔한 것을 이들이 수없이 구해준 거나 다름없죠. Mike Loukides는 훌륭한 편집자였고, 그의 지혜와 지도에 깊이 감사하고 있습니 다. 제가 이 작은 프로젝트를 시작했을 때 누군가 Mike가 업계에서 최고라고 얘기 해 준 적이 있는데, 지금 그 말을 믿습니다. 가장 큰 감사는 사랑하는 아내, Anna에게 돌리고 싶습니다. 그녀의 지지가 이 책 을 만들었습니다. 아내가 함께 했기에 더욱 즐거웠습니다. xx Cookbook 1장 R C o o k b o o k 시작하기와 도움 얻기 들어가며 이 장은 다른 장들을 시작하기 위한 준비과정이다. 어떻게 R을 다운로드하고, 설치 하고, 실행하는지를 다룬다. 더욱 중요하게 봐야 할 부분은, 질문이 생겼을 때 어떻게 답을 구하느냐이다. R 커 뮤니티는 수많은 문서와 도움을 제공한다. 그러니 여러분은 절대 혼자가 아니다. 여 기 도움을 받을 수 있는 몇 가지 일반적인 경로를 나열해 보겠다. 로컬 컴퓨터에 설치된 문서 컴퓨터에 R을 설치하게 되면 산더미 같은 문서도 함께 설치된다. 로컬 문서를 브라 우즈하거나(레피시 1.6) 검색이 가능하다(레피시 1.8). 나는 답을 찾으려고 인터넷을 뒤졌다가, 설치된 문서에 이미 답이 있다는 걸 깨닫고 자주 놀라곤 한다. 태스크뷰(http://cran.r-project.org/web/views) 태스크뷰는 통계학 어느 한 영역 특유의 패키지, 예를 들어 계량경제학이나 의료영 상학(medical imaging), 심리측정학(psychometrics), 공간통계학 등을 설명한다. 각 태스크뷰는 해당 영역의 전문가가 관리한다. 이러한 태스크뷰는 28개가 있으니 아 마 그중 몇 개는 여러분의 관심 영역과 맞닿아 있을 것이다. 모든 초보자가 적어도 하나의 태스크뷰는 찾아 읽어서 R의 응용 가능성을 보았으면 한다. 1장 시작하기와 도움 얻기 1 R 패키지 문서 대부분의 패키지는 쓸만한 문서를 포함하고 있다. 그리고 많은 패키지는 R 커뮤니 티에서 비네트(vignettes, 짧막한 문서)라고 불리는 개요와 튜토리얼도 포함하고 있 다. 문서는 CRAN(http://cran.r-project.org/)와 같은 패키지 저장소에 패키지와 함께 들어 있는데, 패키지를 설치할 때 여러분의 컴퓨터에 자동으로 설치된다. 메일링 리스트 관대하게도 자원봉사자들은 R 메일링 리스트에 포스트하는 초보자들의 질문에 긴 시간을 쏟아 답을 해준다. 리스트는 보관되니 질문이 있을 때 아카이브를 검색해 보면 답을 찾을 수 있다(레시피 1.12). 질문과 답변(Q&A) 웹사이트 Q&A 사이트에는 누구든 질문을 올릴 수 있고, 내용을 잘 아는 사람들이 답변을 해준다. 사용자들이 답변에 투표를 하기 때문에 시간이 지날수록 가장 잘 쓴 답 변들이 위로 올라오게 된다. 이 모든 정보는 태그되며 검색을 위해 보관된다. 이 사이트들은 메일링 리스트와 소셜 네트워크의 교차점이라고 볼 수 있는데, Stack Overflow 사이트(http://stackoverflow.com/)가 좋은 예다. 웹 웹은 R에 대한 정보로 넘쳐나기 때문에, 웹을 검색하는 R 특유의 도구들이 있다(레 시피1.10). 웹의 검색 대상은 변하므로, R과 관련한 정보를 검색 및 정리하는 향상된 방법이 새로 나오는지 주시하고 있어야 한다. 1.1 R 다운로드와 설치 문제 R을 컴퓨터에 설치하고 싶다. 해결책 윈도와 OS X 사용자들은 Comprehensive R Archive Network의 약자인 CRAN에서 2 Cookbook R을 다운로드할 수 있다. 리눅스와 유닉스 사용자는 패키지 관리 도구를 통해 R 패 키지를 설치할 수 있다. 윈도 1. 브 라우저에서 http://www.r-project.org/를 연다. 2. “ CRAN”을 클릭한다. 국가 순으로 정렬된 미러 사이트 목록이 보일 것이다. 3. 본 인과 가까운 나라의 사이트를 고른다. 4. “ Download and Install R” 아래의 “Windows”를 클릭한다. 5. “ base”를 클릭한다. 6. 가 장 최신 버전의 R을 다운로드하는 링크를 클릭한다(.exe 파일). 7. 다 운로드가 끝나면 .exe 파일을 더블클릭하고, 무언가 설치할 때 늘상 보이는 질문들에 답을 한다. OS X 1. 브 라우저에서 http://www.r-project.org/를 연다. 2. “ CRAN”을 클릭한다. 국가 순으로 정렬된 미러 사이트 목록이 보일 것이다. 3. 본 인과 가까운 나라의 사이트를 고른다. 4. “ MacOS X”을 클릭한다. 5. “ Files” 아래에 있는 가장 최신 버전의 R을 다운받는 .pkg 파일을 클릭하고 다 운로드한다. 6. 다 운로드가 끝나면 .pkg 파일을 더블클릭하고, 무언가 설치할 때 늘상 보이는 질문들에 답을 한다. 리눅스나 유닉스 주요 리눅스 배포판은 R 설치 패키지가 나와있다. 다음은 패키지가 있는 몇 가지 배포판이다. 배포판 패키지 이름 우분투(Ubuntu)나 데비안(Debian) r-base 레드햇(Red Hat)이나 페도라(Fedora) R.i386 수세(Suse) R-base 1장 시작하기와 도움 얻기 3 R 시스템의 패키지 관리자로 패키지를 다운로드하고 설치하면 된다. 일반적으로 루트 암호나 sudo 권한이 필요한데, 만약 없는 경우 시스템 관리자에게 설치를 실 행해 달라고 부탁해야 한다. 논의 R을 윈도나 OS X에서 설치하는 방법은 명확한데, 이 플랫폼들을 위한 바이너리가 이미 만들어져 있기 때문이다. 이미 누군가 해 놓은 설치 방법을 따라하기만 하면 된 다. CRAN의 웹 페이지에는 FAQ나 특이 상황에 대한 팁(“윈도 비스타를 쓰는 경우 R을 어떻게 설치하나요?”) 등 설치 관련해 유용하게 참고할 수 있는 링크들이 있다. 이론상으로는 리눅스나 유닉스에 두 가지 방법 중 하나로 R을 설치할 수 있다. 배포판 패키지를 설치하거나 소스로부터 빌드하는 것이다. 실제로는 패키지 설치 를 많이 선호한다. 배포판 패키지는 초기 설치와 이후 업데이트 모두 간단하기 때 문이다. 우분투나 데비안에서는, apt-get을 사용해 R을 다운로드하고 설치한다. sudo 하 에 실행해야 설치 시 필요한 권한이 생긴다. $ sudo apt-get install r-base 레드햇이나 페도라에서는 yum을 사용한다. $ sudo yum install R.i386 대부분의 플랫폼에는 이보다 좀 더 편리한, 그래픽으로 된 패키지 관리자도 있다. 기본 패키지 외에 문서 패키지 또한 설치하기를 권장한다. 실례로 내 우분투에는, 로컬에다가 중요한 R 매뉴얼을 설치해 주는 r-doc-html 뿐만 아니라 r-base-html도 깔아두었다(나는 하이퍼링크된 문서를 더 좋아하니까). $ sudo apt-get install r-base-html r-doc-html 일부 리눅스 저장소는 CRAN에서 구할 수 있는 R 패키지의 복사본을 이미 포함 하고 있다. 그래도 나는 그것을 그대로 사용하기보다는 CRAN에서 패키지를 받는 편을 선호한다. CRAN에는 항상 최신 버전이 있기 때문이다. 드문 경우지만 소스 파일에서 R을 빌드해야 될 때도 있다. 잘 알려져 있지 않고 지원되지 않는 유닉스 버전을 쓰거나, 성능이나 환경 설정 관련해 특별한 설정을 가 4 Cookbook 지고 있는 경우다. 그래도 리눅스나 유닉스의 빌드 절차는 나름대로 표준적이다. 우선 CRAN 미러 사이트에서 tar 파일을 다운받는다. 아마 R-2.12.1.tar.gz와 비슷하 게 생긴 파일이 올라와 있을 텐데, “2.12.1” 부분이 최신 버전으로 대체되었다는 차 이만 있을 것이다. tar 파일의 압축을 풀고, INSTALL이라는 파일을 찾은 다음 파일 의 지시를 따르면 된다. 더 알아보기 『R in a Nutshell』(O’Reilly 출판사)에는 윈도와 OS X 버전을 빌드하는 설명을 포 함해 R 다운로드 및 설치 관련 내용이 더 많이 나와 있다. 아마 궁극의 가이드는 CRAN에서 받을 수 있는 R Installation and Administration(http://cran.r-project.org/ doc/manuals/R-admin.html)이 아닐까 하는데, 여기서는 여러 종류의 플랫폼에서 R 을 빌드하고 설치하는 방법을 설명해 준다. 이 레시피는 기본 패키지를 설치하는 방법이다. CRAN에서 애드온 패키지를 설치 하는 방법을 보려면 레시피 3.9를 찾아 보라. 1.2 R 시작하기 문제 컴퓨터에서 R을 실행하고 싶다. 해결책 윈도 시작 → 모든 프로그램 → R을 클릭한다. 아니면 바탕 화면의 R 아이콘을 더블클릭 한다(설치 프로그램이 아이콘을 만들었다고 가정). OS X 응용 프로그램(Application) 디렉터리에서 아이콘을 클릭하거나 독에 R 아이콘을 놓고 거기서 아이콘을 클릭한다. 셸의 유닉스 커맨드 라인에서 그냥 R을 쳐도 된다. 1장 시작하기와 도움 얻기 5 R 리눅스 또는 유닉스 셸 프롬프트에서 R 커맨드(대문자 R)를 사용해 R 프로그램을 연다. 논의 각자의 플랫폼에서 R을 시작하는 방법 윈도에서 시작하기 R을 시작하면, 새 창이 열린다. 창에는 R Console이라고 불리는 텍스트 패널1이 포 함되어 있는데, 거기에 R 식을 입력할 수 있다(그림 1-1). 그림 1-1 윈도에서 실행된 R R의 윈도 시작 메뉴에는 좀 이상한 점이 있다. 새 버전으로 업그레이드 할 때마다 예전 설치된 버전들을 그대로 유지하면서 시작 메뉴가 확장되는 것이다. 그래서 새 버전으로 업그레이드 했으면 ‘R 2.8.1’, ‘R 2.9.1’, ‘R 2.10.1’ 등등 여러 버전이 선택 가 1 (옮긴이) 본문에는 pane이라고 되어 있으나 이 용어는 GUI 프로그래밍 커뮤니티 외에는 널리 쓰이지 않으므 로 패널로 번역했다. 6 Cookbook 능하게 보일 것이다. 가장 최신 걸 고르면 된다. (지저분해 보이지 않도록 이전 버전 의 삭제도 고려해볼 만하다.) 매번 시작메뉴를 사용하기는 번거로우니 R을 다음의 두 가지 방법으로 시작하길 권한다. 바탕 화면 단축 아이콘을 만들거나, .RData 파일을 더블클릭하는 것이다. 설치 프로그램이 바탕 화면 아이콘을 만들었을 수 있다. 그러지 않았더라도 단축 아이콘을 만들기는 쉽다. 시작 메뉴를 따라 R 프로그램까지 간 다음에, 마우스 왼 쪽 클릭으로 R을 실행하는 대신에 마우스 오른쪽 버튼을 프로그램 이름 위에서 누 르고 있으면서, 그것을 바탕화면으로 드래그한 다음에 버튼을 놓는다. 윈도가 여 기에 복사할지 여기로 이동할지 물을 것이다. ‘여기로 복사’를 누르면 단축 아이콘 이 바탕 화면에 나타나게 된다. R을 시작하는 또 다른 방법은 작업 디렉터리에서 .RData 파일을 더블클릭하는 것 이다. 이 파일은 R이 여러분의 작업 공간(workspace)을 저장할 때 만들어진다. 원하 는 디렉터리를 처음 생성할 때, R을 실행 후 그 디렉터리로 바꾼다. 그리고 프로그 램을 종료하거나 save.image 함수를 사용해서 작업 공간을 거기에 저장한다. 그러 면 .RData 파일이 만들어진다. 그 이후엔, 윈도 익스플로러에서 해당 디렉터리를 열 고 .RData 파일을 더블클릭해서 시작하기만 하면 된다. 아마 R을 시작할 때 가장 황당한 점은 다음과 같은 한 문장으로 요약할 수 있을 것이다. R을 시작할 때 작업 디렉터리가 어디인가? 답은, 당연히 “그때 그때 다르다.” • R을 시작 메뉴에서 시작하면, 작업 디렉터리는 보통 C:\Documents and Settings\<username>\My Documents(윈도 XP)이거나 C:\Users\<username>\ Documents(윈도 비스타, 윈도 7)이다. 기본값은 R_USER 환경 변수를 대체 디 렉터리 경로로 설정해서 바꿀 수 있다. •바 탕 화면의 단축 아이콘으로 R을 켜는 경우, R이 시작되었을 때 작업 디렉터 리가 될 대체 시작 디렉터리를 지정할 수 있다. 대체 디렉터리를 지정하려면 단 축 아이콘을 우클릭하고, Properties를 누르고, ‘Start in’이라고 이름 붙은 박스 에 디렉터리 경로를 입력한 다음에 OK를 누른다. • .RData 파일을 더블클릭해 시작하면 이 사소한 문제가 가장 확실하게 해결된 다. R은 자동으로 작업 디렉터리를 그 파일이 있는 디렉터리로 바꿀 텐데, 보통 은 그게 사용자가 원하는 것일 터이다. 1장 시작하기와 도움 얻기 7 R 어떤 경우든지, getwd 함수를 사용해 현재 작업 디렉터리를 알 수 있다(레시피 3.1). 참고로, 윈도에는 Rterm.exe라고 불리는 콘솔 버전의 R도 있다. R 설치 경로의 bin 하위 디렉터리에서 찾을 수 있다. 하지만 그래픽 사용자 인터페이스(GUI) 버전 보다 훨씬 불편해서 나는 거의 사용하지 않는다. 윈도의 예약된 작업과 같은, 일괄 작업(인터랙티브하지 않은)에 사용할 때에만 추천한다. 이 책에서는 독자들이 R의 콘솔 버전이 아닌 GUI 버전을 사용할 거라고 가정하겠다.2 OS X에서 시작하기 응용 프로그램 폴더의 R 아이콘을 클릭해 실행한다. (만약 R을 자주 사용한다면, 폴더에서 독으로 드래그해도 된다.) 그러면 콘솔 버전보다 조금 더 편한 GUI 버전 이 실행된다. GUI 버전을 켜면, 처음엔 홈 디렉터리로 설정되어 있는 작업 디렉터리 를 보여준다. 또한 OS X에서는 셸 프롬프트에 R을 치면 콘솔 버전을 실행할 수 있다. 리눅스와 유닉스에서 시작하기 유닉스 셸 프롬프트에서 간단하게 프로그램 이름인 R을 치면, 콘솔 버전의 R을 실 행할 수 있다. 대문자 R 대신 소문자 r을 치지 않도록 주의하자. R프로그램은 혼란스러울 정도로 커맨드 라인의 종류가 많다. - -help 옵션을 사 용해 전체 리스트를 볼 수 있다. 더 알아보기 R에서 나가는 방법을 보려면 레시피 1.4를, 현재 작업 디렉터리에 대해 더 알아보려 면 레시피 3.1을, 작업 공간 저장에 대한 더 많은 정보는 레시피 3.2를, 시작 메시지 를 숨기려면 레시피 3.11을 참고하라. 『R in a Nutshell』에 대해서는 2장을 참고하면 된다. 2 (옮긴이) R은 OS 설정에 따라서 그에 맞는 언어로 실행된다. 이 책에서는 아직 한글화가 완전하지 않은 이 유 때문에 영문 버전을 기준으로 한다. 영문으로 설정을 바꾸려면 윈도의 경우 R 단축 아이콘에 커서를 올리 고 우클릭 → 속성 → 대상 필드 뒤에 LANGUAGE=en을 추가한다. OS X의 경우 터미널에 defaults write org. R-project.R force.LANG en_US.UTF-8라고 입력한다. 8 Cookbook 1.3 커맨드 입력하기 문제 R을 시작하니 커맨드 프롬프트가 보인다. 이제 뭘 할까? 해결책 커맨드 프롬프트에 그냥 표현식을 입력하면 된다. R이 알아서 값을 평가해 결과를 출력할(화면에 보여줄) 것이다. 입력을 쉽게 하려면 커맨드 라인 편집 기능을 사용 하면 된다. 논의 R은 프롬프트 ‘>’와 함께 여러분의 표현식 입력을 기다린다. 단지 R을 커다란 계산 기라고 생각하면 쉽다. 식을 입력하면 R이 그 값을 평가하고 출력해 준다. > 1+1 [1] 2 컴퓨터가 1과 1을 더해서 2를 만든 다음에 결과를 보여주는 것이다. 2 앞의 [1]이 뭔지 헷갈릴 수 있다. R에서, 원소 하나밖에 없는 결과라도 이는 벡터 형식이다. R은 값에 [1]을 붙임으로써 벡터의 첫 번째 원소라는 점을 알려 준다. 이 벡터에서 유일한 원소라는 점을 감안하면, 전혀 놀라운 일이 아닐 것이다. R은 여러분이 완전한 표현식을 칠 때까지, 입력하라고 눈치를 준다. max(1,3,5) 라는 표현식은 완전한 표현식이니, R이 입력된 것을 읽는 행동을 중지하고 값을 평 가할 것이다. > max(1,3,5) [1] 5 반면에, ‘max(1,3,’은 불완전한 표현식이라서, R은 여러분에게 무언가 더 입력하도 록 유도한다. 프롬프트는 닫는 꺾쇠 기호(>) 에서 덧셈 기호(+)로 바뀌면서, R이 다 른 입력을 기다리고 있다는 점을 알려준다. > max(1,3, + 5) [1] 5 1장 시작하기와 도움 얻기 9 R 커맨드는 잘못 치기 쉬운데다, 다시 치려면 여간 귀찮지 않다. 그래서 R은 여러분 의 여유로운 삶을 위하여 커맨드 라인 편집 기능을 포함하고 있다. 이 기능은 커맨 드를 쉽게 불러오고, 수정하고, 재실행하는 단축키를 정의해 준다. 내가 늘 사용하 는 커맨드 라인 사용법은 다음과 같다. •오 타가 들어간 R 표현식을 입력한다. •R 이 내 실수에 불평한다. •위 쪽 방향키를 눌러 내가 실수한 라인을 불러온다. •왼 쪽과 오른쪽 방향키를 눌러 오류로 커서를 가져간다. •D elete 키를 사용해 문제가 되는 문자들을 삭제한다. •수 정된 문자를 입력해서 커맨드 라인에 삽입되게 한다. •엔 터키를 눌러 수정된 커맨드를 재실행한다. 이는 기본 중의 기본이다. 그 외에도 R은 표 1-1에 있는 것처럼 커맨드 라인을 불 러오고 편집하는 일반적인 단축키들을 지원한다. 표 1-1 커맨드 라인 편집을 위한 단축키 키 Ctrl+키 조합 효과 위쪽 방향키 Ctrl-P 커맨드 내역(history)을 거꾸로 올라가며 이전 커맨드를 불러 온다. 아래쪽 방향키 Ctrl-N 커맨드 내역의 앞쪽으로 이동한다. Backspace Ctrl-H 커서 왼쪽으로 위치한 문자들을 삭제한다. Delete(Del) Ctrl-D 커서 오른쪽으로 위치한 문자들을 삭제한다. Home Ctrl-A 커서를 줄의 맨 앞으로 이동한다. End Ctrl-E 커서를 줄의 맨 끝으로 이동한다. 오른쪽 방향키 Ctrl-F 커서를 오른쪽(앞)으로 한 문자 이동한다. 왼쪽 방향키 Ctrl-B 커서를 왼쪽(뒤)으로 한 문자 이동한다. Ctrl-K 커서 위치에서부터 줄의 끝까지 있는 모든 문자를 삭제한다. Ctrl-U 쓸모 없는 줄 전체를 삭제하고 처음부터 다시 한다. Tab 10 (몇몇 플랫폼에서만) 커맨드를 자동 완성한다. Cookbook 윈도와 OS X에서 마우스를 가지고 커맨드를 하이라이트 표시한 후 복사와 붙여 넣기 명령을 사용해 새로운 커맨드 라인에 텍스트를 붙여넣을 수 있다. 더 알아보기 레시피 2.13을 보라. 윈도의 주 메뉴에서, 도움말 → 콘솔(Console)을 따라가면 커 맨드 라인 편집 기능과 관련된 유용한 단축키 리스트를 볼 수 있다. 1.4 R에서 나가기 문제 R을 종료하려고 한다. 해결책 윈도 메인 메뉴에서 File → Exit을 선택한다. 또는 창의 오른쪽 상단 모서리에 위치한 빨 간 X를 클릭한다. OS X CMD-q(애플키-q)를 누른다. 또는 창의 왼쪽 상단 모서리에 있는 빨간 X를 클릭 한다. 리눅스나 유닉스 커맨드 프롬프트에서 Ctrl-D를 누른다. 모든 플랫폼에서 q 함수(quit 할 때의 q를 떠올리자)를 사용해 프로그램을 종료 할 수도 있다. > q() 빈 괄호에 주의하라. 함수를 호출할 때 입력해야 하는 것이다. 1장 시작하기와 도움 얻기 11 R 논의 종료할 때마다, R은 작업 공간을 저장할 것인지 물어본다. 여러분에게는 세 가지 선 택권이 있다. •작 업 공간을 저장하고 종료한다. •작 업 공간을 저장하지 않고 종료한다. •종 료하는 대신, 취소하고 커맨드 프롬프트로 돌아간다. 작업 공간을 저장하면, R은 그것을 현재 작업 디렉터리에 .RData라는 파일로 쓴다. 기존에 저장되어 있던 작업 공간이 있는 경우 덮어쓰게 되니, 작업 공간이 변경되는 게 싫다면 저장을 하지 말아야 한다. (예: 중대한 데이터를 실수로 지운 경우 등) 더 알아보기 현재 작업 디렉터리에 대해 더 알아보려면 레시피 3.1을, 작업 공간을 저장하는 것에 대해 더 알아보려면 레시피 3.2를 참고하라. 『R in a Nutshell』에 대해서는 2장을 보 면 된다. 1.5 R을 잠깐 중단하기 문제 R을 종료하지는 않으면서 오래 걸리는 계산을 잠깐 중단하고 커맨드 프롬프트로 돌아가고 싶다. 해결책 윈도 또는 OS X Esc 키를 누르거나 ‘Stop’ 아이콘을 클릭한다. 리눅스 또는 유닉스 Ctrl-C를 누른다. 이렇게 하면 종료하지 않고도 R을 일시 중단할 수 있다. 12 Cookbook 논의 계산이 얼마나 진행되었느냐에 따라 다르지만 R을 일시 중단하는 것은 변수들을 불확실한 상태로 놓아둘 수 있다. 일시 중단한 뒤에는 작업 공간을 확인해 보자. 더 알아보기 레시피 1.4를 참고하라. 1.6 제공된 문서 읽기 문제 R과 함께 제공된 문서를 읽고 싶다. 해결책 문서의 목차를 보려면 help.start 함수를 사용한다. > help.start() 이때 열리는 페이지로부터 설치된 모든 문서를 볼 수 있는 링크에 접근이 가능하다. 논의 R의 기본 배포판은 말 그대로 수천 페이지의, 방대한 문서를 포함하고 있다. 추가 패키지를 설치할 때에도 관련 문서들이 함께 설치된다. help.start 함수를 사용하면 문서 목록의 상위 목차를 새 창으로 띄우는데, 문서 를 브라우즈하기 편하다. 그림 1-2를 보라. Reference 절의 링크 두 개가 특히 유용하다. 패키지(Packages) 기본 배포판과 추가 패키지를 포함해, 설치된 모든 패키지 리스트를 보려면 여기를 클릭한다. 패키지 이름을 클릭해서 함수와 데이터세트 목록을 볼 수 있다. 1장 시작하기와 도움 얻기 13 R 검색 엔진과 키워드(Search Engine & Keywords) 이곳을 클릭하면 문서를 키워드나 구문으로 검색할 수 있는 간단한 검색 엔진을 사용할 수 있다. 주제별로 정리된, 자주 사용하는(common) 키워드 목록도 있는데, 하나 눌러서 관련 페이지들을 봐도 좋겠다. 더 알아보기 로컬 문서는 R 프로젝트 웹사이트(http://www.r-project.org)에서 복사되는데, 최근 업데이트가 있을 수도 있으니 확인해 보자. 그림 1-2. 문서의 목차 14 Cookbook 1.7 함수 도움말 보기 문제 설치된 함수에 대해 더 알고 싶다. 해결책 help를 사용해 그 함수와 관련된 문서를 띄운다. > help(함수 이름) args를 사용해 함수 인자에 대해 간단하게 살펴본다. > args(함수 이름) example을 사용해 그 함수를 사용한 예를 찾아본다. > example(함수 이름) 논의 이 책에서 나는 많은 R 함수를 소개하고 있다. 모든 R 함수에는 내가 일일이 설명하 기에도 힘든 멋진 부가 기능이 있다. 만약 어떤 함수가 여러분의 흥미를 자극한다 면, 그 함수의 도움말 페이지를 읽을 것을 강력히 권한다. 그 함수의 멋진 부가 기능 중에서 여러분에게 유용한 것이 있을 수도 있기 때문이다. 여러분이 mean 함수에 대해 더 알고 싶어 한다고 가정하자. 다음과 같이 help 함 수를 사용해보자. > help(mean) 그러면 사용 중인 플랫폼에 따라 콘솔에서 함수의 문서가 있는 창을 열거나, 문 서를 바로 표시하거나 둘 중 하나를 하게 된다. 도움말 커맨드의 단축키는 함수 이 름 뒤에 ?만 붙이면 된다. > ?mean 때로는 함수의 인자(argument)들에 대한 잊어버리고 있던 정보를 기억해내고 싶 을지도 모른다. 인자들이 뭐뭐였지? 어떤 순서로 나왔지? 등등. 그럴 경우, args 함 수를 사용한다. 1장 시작하기와 도움 얻기 15 R > args(mean) function (x, ...) NULL > args(sd) function (x, na.rm = FALSE) NULL args 출력의 첫 줄은 함수 호출의 개요이다. mean에 대해서, 개요는 하나 뿐인 인자인 x를 보여주는데, 이것은 숫자 벡터다. sd에 대한 개요는 동일한 벡터인 x와 na.rm이라 불리는 선택적 인자를 보여준다.(보통 NULL이 뜨는 출력의 두 번째 줄 은 무시해도 된다.) 함수를 설명하는 대부분의 문서는 끝 부분에 사용례를 포함하고 있다. R에는 사 용례를 실행해서 함수의 기능을 시범으로 보여주는 좋은 기능이 있다. 이를테면 mean 함수에 딸린 문서는 사용례들을 가지고 있지만 여러분이 그걸 직접 입력할 필요는 없다. 그저 example 함수를 사용하고 실행되는 걸 보기만 해라. > example(mean) mean> x <- c(0:10, 50) mean> xm <- mean(x) mean> c(xm, mean(x, trim = 0.1)) [1] 8.75 5.50 mean> mean(USArrests, trim = 0.2) Murder Assault UrbanPop Rape 7.42 167.60 66.20 20.16 위의 경우 사용자는 example(mean)을 입력했다. 나머지는 모두 R이 만들어낸 것 으로, 도움말 페이지에서 예를 실행하고 결과를 나타내 주었다. 더 알아보기 함수 검색에 대해서는 레시피 1.8을, 검색 경로에 대해서는 레시피 3.5를 참고하라. 16 Cookbook 1.8 제공된 문서를 검색하기 문제 컴퓨터에 설치된 함수에 대해 더 알아보고 싶지만, help 함수가 해당 함수에 대한 문서가 없다고 보고한다. 그래서 대신 키워드를 가지고 설치된 문서를 검색하고 싶다. 해결책 help.search를 써서 컴퓨터에서 R 문서를 찾는다. > help.search(“pattern”) 전형적으로 ‘패턴(pattern)’은 함수 이름이거나 키워드를 말한다. 키워드는 따옴 표 안에 쓴다는 사실을 꼭 기억하자. 여러분의 편의를 위해 더 얘기하자면, 두 개의 물음표로도 검색을 할 수 있다(이 경우 따옴표는 필요가 없다). > ??pattern 논의 함수와 관련된 도움을 요청했지만, R이 아무것도 모른다고 하는 경우에 맞닥뜨릴 수도 있다. > help(adf.test) No documentation for 'adf.test' in specified packages and libraries: you could try 'help.search("adf.test")' 컴퓨터에 그 함수가 설치되어 있다는 사실을 이미 알고 있는데 R이 발뺌한다면 더욱 실망스럽다. 여기에서 문제는 그 함수의 패키지가 불러와(load)져 있지 않고, 그 함수가 어느 패키지에 속해 있는지를 모른다는 점이다. 일종의 진퇴양난의 상황 으로 볼 수 있다(에러 메시지는 패키지가 현재 검색 경로에 있지 않으며, 그래서 R이 도움말 파일을 찾을 수 없다고 한다. 더 자세한 설명은 레시피 3.5를 보라). 해결 방법은 그 함수를 모든 설치된 패키지에서 검색하는 것이다. 에러 메시지에 서 추천하는 대로, help.search 함수를 사용하면 된다. 1장 시작하기와 도움 얻기 17 R > help.search("adf.test") 검색을 하면 해당 함수를 포함하는 모든 패키지의 목록이 생성된다. Help files with alias or concept or title matching 'adf.test' using regular expression matching: tseries::adf.test Augmented Dickey-Fuller Test Type '?PKG::FOO' to inspect entry 'PKG::FOO TITLE'. 예를 들어 위 결과는 tseries 패키지가 adf.test 함수를 포함하고 있다는 사실을 가 리킨다. help에 어떤 패키지가 해당 함수를 포함하고 있는지 정확하게 얘기해 주면, 해당 문서를 볼 수 있다. > help(adf.test, package="tseries") 다른 방법으로는 tseries 패키지를 검색 목록에 집어넣고 제일 앞서 말한 help 커 맨드를 반복해도 되며, 이렇게 하면 R이 함수를 찾아서 문서를 보여준다. 키워드를 사용해서 더 넓게 검색을 할 수도 있다. 그러면 R은 그 키워드들을 포 함한 모든 문서를 찾는다. ADF(Augmented Dickey-Fuller) 검정을 언급하는 모든 함수를 찾고 싶다고 가정해 보자. 아마 다음과 비슷한 패턴으로 검색할 수 있을 것이다. > help.search("dickey-fuller") 내 컴퓨터에는 ADF 검정을 구현하는 두 개의 추가 패키지(fUnitRoots와 urca)를 설치해 두었기 때문에 결과가 다음과 같이 나온다. Help files with alias or concept or title matching 'dickey-fuller' using fuzzy matching: fUnitRoots::DickeyFullerPValues Dickey-Fuller p Values tseries::adf.test Augmented Dickey-Fuller Test urca::ur.df Augmented-Dickey-Fuller Unit Root Test Type '?PKG::FOO' to inspect entry 'PKG::FOO TITLE'. 18 Cookbook 더 알아보기 문서 브라우저를 통해 로컬 검색 엔진으로 들어갈 수 있다. 이 과정을 알아보려면 레시피 1.6을 읽도록 하자. 레피시 3.5에서는 검색 경로에 대한 내용을 더 다루고 있 고, 레시피 4.4에서는 함수 도움말 보기에 대해 더 알아볼 수 있다. 1.9 패키지 도움말 보기 문제 컴퓨터에 설치된 어떤 패키지에 대해서 더 배웠으면 한다. 해결책 help 함수를 사용하고 패키지 이름을 명시한다(함수 이름은 빼고). > help(package="패키지 이름") 논의 패키지에 포함된 내용(함수와 데이터세트들)을 알고 싶을 때도 있다. 특히 새로운 패키지를 다운로드하고 설치했을 때 더 그렇다. 도움말 함수에 패키지 이름을 명시 하면 내용 및 기타 다른 정보를 출력해 준다. 다음의 도움말 호출은 기본 배포판의 표준 패키지인 tseries3 패키지에 대한 정보 를 화면에 보여준다. > help(package="tseries") 출력되는 정보는 설명(Description)으로 시작해서 함수와 데이터세트의 색인 (index)으로 이어진다. 내 컴퓨터에서는 시작 부분의 몇 줄이 다음과 같이 보인다. Information on package 'tseries' Description: Package: Version: Date: tseries 0.10-22 2009-11-22 3 (옮긴이) R 2.14.1 버전 현재 tseries 패키지는 표준 패키지에 포함되어 있지 않다. 1장 시작하기와 도움 얻기 19 R Title: Author: Maintainer: Description: Depends: Suggests: Imports: License: Packaged: Repository: Date/Publication: Built: Time series analysis and computational finance Compiled by Adrian Trapletti <[email protected]> Kurt Hornik <[email protected]> Package for time series analysis and computational finance R (>= 2.4.0), quadprog, stats, zoo its graphics, stats, utils GPL-2 2009-11-22 19:03:45 UTC; hornik CRAN 2009-11-22 19:06:50 R 2.10.0; i386-pc-mingw32; 2009-12-01 19:32:47 UTC; windows Index: NelPlo USeconomic adf.test arma Nelson-Plosser Macroeconomic Time Series U.S. Economic Variables Augmented Dickey-Fuller Test Fit ARMA Models to Time Series . . (etc.) . 일부 패키지에는 소개(introduction), 튜토리얼, 혹은 레퍼런스(reference card) 같 은 추가적인 문서인 비네트도 들어있다. 패키지를 설치할 때 이 문서들은 패키지의 일부로서 함께 설치되며, 패키지 도움말 페이지에는 끝 부분에 비네트 목록이 쓰여 있다. vignette 함수를 사용해서 컴퓨터에 설치된 모든 비네트 목록을 볼 수 있다. > vignette() 패키지 이름을 같이 입력하면, 특정한 패키지에 속하는 비네트를 볼 수 있다. > vignette(package="패키지 이름") 특정 비네트를 보고자 할 때는 비네트 이름을 사용한다. > vignette("비네트 이름") 20 Cookbook 더 알아보기 패키지에 있는 특정한 함수의 도움말을 보는 방법은 레시피 1.7을 참고하라. 1.10 인터넷 검색으로 도움말 보기 문제 R과 관련된 정보 및 문제에 대한 해결책을 찾기 위해 인터넷을 검색하고 싶다. 해결책 R 내부에서 RSiteSearch 함수를 사용해 키워드나 구문(phrase)으로 검색한다. > RSiteSearch("키워드") 인터넷 브라우저로 다음과 같은 사이트에 들어가 검색해 본다. http://rseek.org R만 다루는 웹사이트들을 집중적으로 다루는 구글 맞춤검색이다. http://stackoverflow.com/ Stack Overflow는 검색 가능한 Q&A 사이트로 데이터 구조, 코딩, 그래픽을 다루는 웹사이트다. http://stats.stackexchange.com/ Stack Exchange의 통계 분석(Statistical Analysis) 분야 또한 검색이 가능한 Q&A 사 이트로 프로그래밍보다는 통계를 다루는 경향이 있다. 논의 RSiteSearch 함수를 쓰면 브라우저 창을 열고 R 프로젝트 웹사이트(http://search. r-project.org/)의 검색 엔진으로 데려갈 것이다. 검색 결과가 처음에 보이고, 검 색 범위를 좁힐 수도 있다. 예를 들어보면 다음 호출은 ‘정준상관분석(canonical correlation)’에 대한 검색을 활성화한다. > RSiteSearch("canonical correlation") 1장 시작하기와 도움 얻기 21 R 그림 1-3 rseek.org 검색 결과 이 방법은 R을 떠나지 않고 빠르게 인터넷 검색을 하기에 꽤나 편하다. 그러나 검 색의 범위가 R 문서와 메일링 리스트 아카이브에 국한되어 있다는 단점이 있다. rseek.org 사이트는 더 넓은 범위의 검색을 제공한다. 이곳의 좋은 점은 R과 관련 된 사이트들에 초점을 맞춤과 동시에 구글 검색 엔진의 힘을 이용한다는 것이다. 따라서 포괄적인 구글 검색에서 관련 없는 결과가 제거된 결과가 보인다. rseek.org 의 묘미는 검색 결과를 유용하게 정리해 준다는 데 있다. 그림 1-3은 rseek.org를 방문해 ‘canonical correlation’을 입력한 결과다. 페이지의 왼쪽에는 R 사이트 검색의 일반적인 결과가 나타나 있다. 오른쪽에는 검색 결과를 몇 개의 카테고리로 구분한 탭이 보인다. •소 개(Introductions) •태 스크뷰(Task Views) •지 원 목록(Support Lists)4 4 (옮긴이) 사용자들 간의 질의 응답이라고 보면 된다. 22 Cookbook •함 수(Functions) •책 (Books) •블 로그(Blogs) •관 련 도구(Related Tools) 소개 탭을 클릭하면 튜토리얼이 나온다. Task Views 탭은 검색한 단어를 언급하 는 모든 Task View를 보여준다. 마찬가지로 함수 탭을 클릭하면 검색한 것과 관련 된 R 함수들이 나타난다. 검색 결과를 재한해서 보고 싶을 때 좋은 방법이다. Stack Overflow(http://stackoverflow.com/)는 소위 말하는 Q&A 사이트로, 누구 든 질문을 올릴 수 있고, R에 능숙한 사람들이 그에 답변을 달아주는 곳이다. 그래 서 종종 하나의 질문에 여러 개의 답변이 달리기도 한다. 독자들이 답변에 투표를 하기 때문에 좋은 답변들이 위로 올라가는 경향이 있다. 그 덕분에 여러분이 검색을 할 수 있는 풍부한 Q&A 데이터베이스가 만들어진다. Stack Overflow는 문제 중심 으로 되어있으며, 대부분의 주제가 R의 프로그래밍 쪽으로 치우쳐 있기도 하다. Stack Overflow는 R 뿐만 아니라 여러 프로그래밍 언어에 대한 질문을 다루고 있 다. R로 태그된 질문으로 검색의 초점을 맞추려면, 검색할 때 앞에 [r]을 붙이고 입력 한다. 예를 들어 “[r] standard error(표준 오차)”라고 검색하면 R로 태그된 질문만을 선택하면서 파이썬과 C++ 질문은 제외하게 된다. Stack Exchange(Overflow가 아니고)에는 통계 분석 관련 Q&A 영역이 있다. 이곳 은 프로그래밍보다 통계에 더 초점이 맞추어져 있으니, 특별히 R이라기보다는 일반 적인 통계에 대한 해답을 구하고 있다면 이 사이트를 이용할 것을 권한다. 더 알아보기 검색으로 쓸 만한 패키지를 찾았다면, 레시피 3.9를 참고해 컴퓨터에 설치하자. 1장 시작하기와 도움 얻기 23 R 1.11 적절한 함수와 패키지 찾기 문제 2000개5가 넘는 R 패키지 중에서 어떤 것을 써야 하는지 모르겠다. 해결책 •h ttp://cran.r-project.org/web/views/의 태스크뷰(Task Views) 목록을 보자. 여 러분이 원하는 분야의 태스크뷰를 찾아서 관련 패키지로 가는 링크와 설명을 읽으면 된다. 아니면 http://rseek.org에 들어가서 키워드로 검색을 하고 태스크 뷰 탭을 누른 뒤 해당되는 태스크뷰를 선택하라. • c rantastic(http://crantastic.org)에 들어가서 키워드로 패키지를 검색한다. •적 절한 함수를 찾으려면 http://reseek.org에 들어간다. 이름이나 키워드로 검 색을 하고, 함수(Functions) 탭을 누른다. 논의 초보자들에게 있어서 특히나 이 상황은 짜증을 불러일으킬 수 있다. 분명히 R이 문 제를 해결해 주기는 할 텐데, 어떤 패키지나 함수를 사용해야 하는지는 전혀 감이 안 올 테니까. 메일링 리스트에서 자주 언급되는 질문 중에 “X라는 문제를 해결해 줄 패키지가 있나요?”가 있다. R에 빠져서 허우적대는 사람들의 소리없는 아우성인 셈이다. 이 책이 쓰인 시점에, CRAN에서 무료로 다운로드가 가능한 패키지가 2000개5 이 상이었다. 각 패키지에는 패키지 문서로 가는 링크와 짧은 설명이 있는 요약 페이지 가 있다. 일단 잠재적으로 괜찮아 보이는 패키지를 찾은 뒤에는, 늘 그렇듯이 ‘레퍼 런스 매뉴얼(Reference manual)’ 링크를 눌러 상세 설명이 포함된 PDF 문서를 보게 된다. (요약 페이지에는 패키지를 설치하는 다운로드 링크도 있지만, 그 방법으로 설치하는 경우는 거의 없다. 레시피 3.9를 보자.) 때때로 좀 더 포괄적인 범위를 찾고 싶을 때가 있다. 베이지안 분석(Bayesia analysis), 계량경제학, 최적화 또는 그래픽 등, CRAN에는 유용한 패키지들을 설명 5 (옮긴이) 2012년 3월 2일 현재 CRAN에는 3,643개의 패키지가 등록되어 있다. 24 Cookbook 해 주는 태스크뷰 페이지들이 있다. R로 어떤 일이 가능한지 개략적으로 알려주는 태스크뷰 페이지를 먼저 찾아보자. http://cran.r-project.org/web/views/에서 태스 크뷰 페이지 목록을 볼 수도 있고, 해결책에서 설명한 것 같이 검색을 해도 된다. 괜찮은 패키지의 이름을 알고 있는 경우라고 하자(온라인에서 누가 언급하는 걸 들었다고 해보자). http://cran.r -project.org/web/packages/에 가면 전체 패키지가 알파벳 순으로 정리되어 있고, 각각의 요약 페이지로 갈 수 있는 링크도 있다. 더 알아보기 패키지를 검색하는 sos라는 R 패키지를 설치하는 방법도 있다. http://cran.r-project. org/web/packages/sos/vignettes/sos.pdf의 비네트를 참고하라. 1.12 메일링 리스트 검색하기 문제 궁금한 점이 생겼는데 메일링 리스트 아카이브를 뒤져 그 질문이 이전에 답변된 적 이 있는지를 보려고 한다. 해결책 •브 라우저에서 http://rseek.org를 연다. 키워드를 검색하거나 질문에서 다른 단 어를 뽑아서 검색한다. 검색 결과가 나오면, ‘지원 목록(Support Lists)’ 탭을 클 릭한다. •R 내에서도 검색을 수행할 수 있다. RSiteSearch 함수를 사용해서 검색을 시작 한다. > RSiteSearch("검색 구") 검색 결과가 브라우저에 뜰 것이다. ‘대상(Target)’ 아래에서 R 도움말(R-help) 자 료를 선택하고, 다른 자료들은 체크 해제한 뒤 쿼리를 재전송한다. 1장 시작하기와 도움 얻기 25 R 논의 이 레시피는 레시피 1.10의 단순한 활용이라고 볼 수 있다. 하지만 새 질문을 목록 에 올리기 전에 메일링 리스트를 검색해보는 것이 예의이기 때문에 중요한 레시피이 다. 여러분이 올리려는 질문은 이미 이전에 누군가 답변해 줬을 가능성이 높다. 더 알아보기 CRAN에는 인터넷을 검색하는 데 도움이 될 내용이 더 있다. http://cran.r-project. org/search.html을 참고하자. 1.13 메일링 리스트에 질문 보내기 문제 R 도움말 메일링 리스트를 통해 질문을 보내고 싶다. 해결책 메일링 리스트(http://www.r-project.org/mail.html) 페이지에는 R 도움말 메일링 리 스트를 사용하는데 필요한 일반적인 내용이 쓰여 있다. 진행되는 과정은 보통 다 음과 같다. •메 인 R 메일링 리스트(https://stat.ethz.ch/mailman/listinfo/r-help)에서 R 도움 말 리스트를 구독한다. •포 스팅 가이드(http://www.r-project.org/posting-guide.html)를 읽고 효과적으 로 질문을 보내는 방법을 배운다. •질 문을 주의해서 올바르게 작성한다. 필요하다면 간단히 재현 가능한 예제를 포함해, 다른 사람들이 오류나 문제를 재현해 볼 수 있도록 한다. •질 문을 [email protected]에 메일로 보낸다. 논의 R 메일링 리스트는 강력한 자원이긴 하지만 제발 마지막 수단으로 남겨두자. 먼저 도움말 페이지를 읽고, 문서를 읽고, 도움말 목록 아카이브를 검색하고, 인터넷을 26 Cookbook 검색해 보는 것이 좋다. 여러분이 생각하는 질문은 이미 답변되었을 가능성이 무척 높기 때문이다. 정말 새로운 질문은 아주 극소수이니, 자기 질문은 특별하다고 자 만하지 말자. 질문을 작성한 뒤에, 제출하는 방법은 굉장히 쉽다. [email protected]에 메일로 보내기만 하면 된다. 주의할 점은 리스트 구독자가 아니면 질문을 해도 거절될 수 있다는 것이다. R 코드가 에러를 내거나, 예상치 못한 결과를 보여준다는 질문이 있을 수 있다. 이런 경우, 여러분 질문에서 가장 중요하게 다루어야 할 부분은 바로 최소한으로 필요한 정보를 담은 예다. 최소한으로(Minimal) 문제를 보여주는 가장 작은 토막의 R 코드를 작성하라. 관련 없는 것들은 모두 지 운다. 필요한(Self-contained) 에러를 정확히 재현할 만큼 필요한 데이터를 넣는다. 만약 리스트 독자들이 재현할 수 없으면 진단을 할 수가 없다. 복잡한 데이터 구조인 경우 dump 함수를 사용해 데이터의 ASCII 표현을 만들고 메시지에 포함시킨다. 예를 포함시키면 질문을 더 명확하게 할 수가 있고, 이는 도움이 되는 답변을 받 을 확률을 높여 준다. 사실 메일링 리스트는 여러 개가 있다. R 도움말은 일반적인 질문을 대상으로 하 는 주된 리스트다. 유전학, 금융, R 개발, R 직업 등 특정한 영역에 집중하는 special interest group(SIG) 메일링 리스트들도 있다. 전체 목록은 https://stat.ethz.ch/ mailman/listinfo에서 볼 수 있다. 만약 질문이 어느 한 영역에 특화된 것이라면 적 절한 리스트를 선택해 더 좋은 답변을 받을 수 있다. R 도움말에 질문을 하기 전에 SIG 목록 아카이브를 주의해서 검색해 보자. 더 알아보기 Eric Raymond와 Rick Moen이 쓴 「똑똑하게 질문하는 방법(How to Ask Questions 1장 시작하기와 도움 얻기 27 R the Smart Way)」(http://www.catb.org/~esr/faqs/smart-questions.html)이라는 훌 륭한 에세이가 있다. 질문을 하기 전에 읽어 보기를 권장한다. 28
© Copyright 2024