35 R 마크다운 워크플로

앞서 우리는 콘솔에서 대화형으로 작업하는 R 코드를 캡쳐하고, 또 스크립트 에디터에서 동작하는 것을 캡쳐하는 기본적인 워크플로에 대해 살펴보았다. R 마크다운은 콘솔과 스크립트 에디터를 통합하여 대화형 탐색과 장기 코드 캡쳐간의 경계를 모호하게 만든다. 청크 내에서 반복적으로 빠르게 편집하고 Cmd/Ctrl + Shift + Enter 로 재실행할 수 있다. 더 편집할 게 없으면 새로운 청크로 넘어가면 된다.

R마크다운은 설명글과 코드를 긴밀하게 통합하기 때문에 중요하다. 코드를 개발하고 생각을 기록할 수 있기 때문에 훌륭한 분석 노트북이 된다. 분석 노트북의 목표는 물리학의 고전적 실험실 노트북의 그것과 상당 부분 같다. 그 목표는 다음과 같다.

  • 여러분이 무엇을 했는지, 왜 그것을 했는지를 기록한다. 기억력이 얼마나 좋은지와 상관없이, 한 일을 기록하지 않으면 중요한 세부사항을 잊어 버렸을 때가 온다. 잊지 않도록 적어두자!

  • 엄격하게 사고할 수 있게 한다. 진행하면서 생각을 기록하고 반영하기를 계속한다면 강력한 분석을 내놓을 가능성이 크다. 또한 다른사람들과 공유하기 위해 최종적으로 분석 내용을 작성할 때도 시간을 절약할 수 있다.

  • 다른 사람이 작업 내용을 이해하도록 도와준다. 혼자 데이터 분석을 하는 것은 드물고, 팀의 일원으로 일하는 경우가 많다. 실험실 노트북을 사용하면 동료에게 여러분이 한 것뿐만 아니라 왜 했는지도 쉽게 공유할 수 있다.

실험실 노트북을 효과적으로 사용하기 위한 좋은 조언들은 분석 노트북에도 적용할 수 있다. 나의 경험과 콜린 퍼링턴(Colin Purrington)의 실험실 노트북에 대한 조언(http://colinpurrington.com/tips/lab-notebooks)을 통해 얻은 팁은 다음과 같다.

  • 각 노트북에는 설명이 담긴 제목, 연상할 수 있는 파일이름 및 분석 목적을 간략하게 설명하는 첫 번째 단락이 있도록 한다.

  • YAML 헤더 날짜 필드를 이용하여 노트북에서 작업을 시작한 날짜를 기록하라.

    date: 2016-08-23

    모호성을 피하기 위해 ISO8601 YYYY-MM-DD 형식을 사용하라. 개인적으로 날짜를 이런 식으로 쓰지 않는 사람이라도 이렇게 하라!

  • 분석 아이디어에 많은 시간을 투자했는데 막다른 골목으로 판명되더라도 삭제하지 마라! 간략하게 실패 이유에 대해 메모를 작성하여 노트북에 남기자. 그러면 향후, 분석을 다시 할 때 막다른 골목으로 똑같이 빠지는 것을 피할 수 있다.

  • 데이터 입력을 R 외부에서 하는 것이 일반적으로 좋다. 하지만 소량의 데이터 스니펫을 기록해야 한다면 tibble:tribble() 을 이용하여 명확하게 표시하라.

  • 데이터 파일에서 오류를 발견했다면 절대로 직접 수정하지 말고, 코드를 작성하여 값을 수정하라. 왜 수정했는지를 설명하라.

  • 업무를 마감하기 전에, 노트북이 니트가 되는지를 확인하라. (캐싱을 사용한다면 캐시들을 삭제하라.) 그렇게 하면 코드가 머릿속에서 생생할 때 문제를 해결할 수 있다.

  • 코드를 장기 재생산성을 갖도록 (즉, 다음 달이나 내년에 실행할 수 있도록) 하려면 코드가 사용하는 패키지들의 버전을 추적해야 한다. 엄격하게 하려면 packrat(http://rstudio.github.io/packrat/)을 사용하는 것인데, 이는 패키지들을 프로젝트 디렉터리나 체크포인트(https://github.com/RevolutionAnalytics/checkpoint)에 저장한 뒤, 지정된 날짜에 가능한 패키지들을 재설치한다. 빠른 방법은 sessionInfo() 를 실행하는 청크를 포함하는 것인데, 이렇게 하면 패키지를 현재 시점으로 재생성하지는 못하지만, 최소한 어떤 것이었는지를 알 수 있다.

  • 여러분은 업무를 하면서 매우 매우 매우 많은 분석 노트북을 생성할 것이다. 어떻게 노트북들을 정리해야 미래에서도 다시 찾을 수 있을까? 노트북들을 개별 프로젝트에 저장하고 좋은 명명 스키마로 정리할 것을 추천한다.