12 워크플로: 프로젝트

어느날 여러분은 R 을 종료하고 다른 것을 하러 간 다음, 다음날 다시 돌아와서 분석을 계속한다. 어느날 여러분은 R 을 사용하는 여러 분석업무를 동시에 하고는 각기 저장하고 싶을 것이다. 어느날 당신은 바깥 세상에서 R 로 데이터를 불러온 후 수치결과와 그림을 다시 그 세상에 보낼 필요가 있을 것이다. 이러한 실제 상황들을 다루기 위해 당신은 두가지 결정을 할 필요가 있다.

  1. 여러분 분석 중 어떤 것이 “리얼” 인가, 즉, 분석한 내용을 지속적으로 기록하기 위해 어떤 것을 저장할 것인가?

  2. 당신 분석이 “존재하는” 곳은 어디인가?

12.1 무엇이 리얼인가?

처음 시작하는 R 유저는 환경(즉, environment 창에 보이는 객체들) 을 “리얼”이라고 고려해도 괜찮을 것이다. 하지만, 장기적으로는 R 스크립트를 “리얼”로 고려하는 것이 훨씬 나을 것이다.

R 스크립트 (그리고 데이터 파일) 가 있으면 여러분은 환경을 다시 생성할 수 있다. 환경에서 R 스크립트를 다시 생성하는 것이 훨씬 어렵다! 메모리에 있는 다량의 코드를 (계속 실수를 해가면서) 다시 입력해야 하거나 R 히스토리를 조심히 마이닝 해야할 것이다.

이를 위해, 세션간 작업공간을 공유하지 않도록 RStudio 를 설정하는 것을 강력하게 추천한다.

이렇게 하면 Rstudio 를 다시 시작할 때, 마지막으로 실행한 코드의 결과가 남아 있지 않기 때문에 단기적으로 귀찮게 느껴질 수 있다. 그렇지만 코드의 모든 중요한 관계를 포착해야 하는 장기적인 괴로움은 덜어준다. 중요한 작업의 코드 자체를 저장하지 않고, 작업 공간에만 저장했다는 사실을 3개월 만에 발견한 것보다 더 심각한 일은 없을 것이다.

편집기에서 코드의 중요한 부분을 포착했는지 확인할 수 있는 좋은 단축키 조합이 있다.

  1. RStudio를 다시 시작하려면 Cmd/Ctrl + Shift + F10 을 누른다.
  2. 지금의 스크립트를 다시 실행하려면 Cmd/Ctrl + Shift + S 를 누른다.

나는 이러한 패턴을 일주일에 수백 번 사용하고 있다.

12.2 분석작업이 어디에 존재하는가?

R 은 작업 디렉터리(working directory)와 강력하게 연결되어 있다. R 에서 파일을 불러오고자 할 때 작업 디렉터리에서 찾으며, 파일을 저장할 때에도 작업 디렉터리에 저장한다. RStudio 에서는 현재 작업 디렉터리를 콘솔 상단에 표시한다:

또한, getwd() 를 실행하면 R 코드로 작업 디렉터리를 출력할 수 있다:

getwd()
#> [1] "/Users/hadley/Documents/r4ds/r4ds"

초급 R 사용자의 경우 홈 디렉터리, 문서 디렉터리 또는 기타 등등의 디렉터리를 R 의 작업 디렉터리로 두어도 괜찮다. 그러나 여러분이 6 장까지 차례대로 따라 왔다면 더는 초급자가 아니다. 이제는 구성한 분석 프로젝트를 디렉터리로 설정하고, 프로젝트 작업시 세팅한 R 작업 디렉터리를 관련된 디렉터리로 설정해야 한다.

권장하지는 않지만 R 내에서 작업 디렉터리를 설정할 수도 있다:

setwd("/path/to/my/CoolProject")

그렇지만 더 좋은 방법이 있으므로 이를 실행하지는 말라. 다음에 설명할 방법이 R 작업을 관리하는 전문가로서의 길로 이끌어 줄 것이다.

12.3 경로와 디렉터리

경로에는 2 가지의 기본 스타일 (Mac/Linux 와 Windows)이 존재하므로 경로와 디렉터리는 약간 복잡하다. 서로 다른 세 가지 주요 방식이 있다:

  1. 가장 중요한 차이점은 경로의 구성요소를 분리하는 방법이다. Mac 과 Linux 는 슬래시(예, plots/diamonds.pdf)를 사용하고, Windows 는 역슬래시(예, plots.pdf)를 사용한다. (현재 사용하고 있는 플랫폼과 관계없이) R 은 2 개의 타입에 모두 동작하지만, 역슬래시는 R 에서 특별한 의미가 있으므로 경로에 1 개의 역슬래시를 사용하기 위해서는 2 개의 역슬래시를 입력해야 한다. 이는 불편하기 때문에 슬래시를 쓰는 Linux/Max 스타일을 사용하는 것이 좋다.

  2. 절대경로(즉, 작업 디렉터리와 관계없이 같은 위치를 가리키는 경로)의 표현이 다르다.
    Windows에서는 드라이브 문자(예, C:) 또는 2개의 역슬래시(예, \\servername)로 시작하고, Mac/Linux에서는 슬래시 “/”(예, /users/hadley)로 시작한다. 절대경로는 공유가 불가하므로 절대로 스크립트에서 사용해서는 안된다. 서로 똑같은 디렉터리로 구성한 사람은 아무도 없을 것이기 때문이다.

  3. 마지막으로 사소한 차이점은 ~ 가 가리키는 위치이다. ~ 는 홈 디렉터리로 가는 편리한 단축어이다. Windows 는 홈 디렉터리 개념을 가지고 있지 않으므로 Windows에서는 홈 디렉터리 대신 문서 디렉터리를 가리킨다.

12.4 RStudio 프로젝트

R 전문가는 프로젝트와 관련된 모든 파일(입력 데이터, R 스크립트, 분석 결과, 그림)을 함께 남겨둔다. 이것은 RStudio 가 프로젝트를 통해 기본으로 제공하는 유용하고 일반적인 방식이다.

이 책의 나머지 부분을 작업하는 동안 사용할 프로젝트를 만들어보자. File > New Project 를 클릭한 후, 다음의 작업을 수행해보자:

프로젝트 이름을 r4ds 라고 짓고, 어떤 하위디렉터리를 프로젝트에 넣을지 신중하게 생각해보자. 합리적인 장소에 두지 않으면 나중에 찾기 어려워질 것이다.

이 과정이 완료되면 이 책을 위한 새로운 RStudio 프로젝트를 얻을 수 있다. 프로젝트의 “홈” 디렉터리가 현재 작업 중인 디렉터리인지 확인해보자:

getwd()
#> [1] /Users/hadley/Documents/r4ds/r4ds

상대 경로로 된 파일을 참조할 때마다 앞의 코드에서 찾게 될 것이다.

이제 스크립트 편집기에서 다음 명령어를 입력하고 “diamonds.R” 이름으로 파일을 저장해보자. 그런 다음 완전한 스크립트를 실행하면 프로젝트 디렉터리에 PDF 및 CSV 파일로 저장될 것이다. 코드의 세부사항은 나중에 배우게 될 것이므로 신경쓰지 않아도 된다.

library(tidyverse)

ggplot(diamonds, aes(carat, price)) + 
  geom_hex()
ggsave("diamonds.pdf")

write_csv(diamonds, "diamonds.csv")

RStudio 를 종료하고, 프로젝트와 관련된 폴더에서 .Rproj 파일을 발견하자. 해당 파일을 더블 클릭하여 프로젝트를 다시 열어보자. 중단한 부분으로 돌아갔는지 확인해보자. 이는 동일한 작업 디렉터리와 명령어 이력 그리고 작업 중이었던 모든 파일이 여전히 열려있는지 확인하는 것을 의미한다. 그렇지만 백지의 상태에서 시작한다는 위의 설정을 따랐으므로 완전히 새로운 환경으로 시작했을 것이다.

본인이 선호하는 OS 방식으로 diamonds.pdf 를 검색하면 PDF 파일을 찾을 수 있지만 (당연하겠지만) 이를 생성한 스크립트(diamonds.R)도 찾을 수 있다. 이것은 굉장한 장점이다. 언젠가 그림을 다시 만들고 싶거나 그림이 어떻게 만들어졌는지 이해하고 싶을 것이다. R 코드와 함께 그림을 파일로 모두 저장했다면 마우스나 클립보드를 사용하지 않아도 이전 작업을 쉽게 재현할 수 있다.

12.5 요약

요약하면 RStudio 프로젝트는 미래에 자신을 잘 지원할 수 있는 견고한 워크플로를 제공한다:

  • 각 데이터 분석 프로젝트에 대해 RStudio 프로젝트를 만든다.

  • 이 곳에 데이터 파일들을 저장한다. 이들을 R 로 불러오는 것은 9 장에서 살펴볼 것이다.

  • 스크립트도 같은 곳에 저장한다; 스크립트를 줄단위 또는 전체 단위로 편집하고, 실행한다.

  • 플롯이나 정제된 데이터와 같은 결과물도 같은 곳에 저장한다.

  • 절대경로가 아닌 상대경로만 사용한다.

여러분이 필요로 하는 모든 것은 한곳에 위치하여, 작업 중인 다른 프로젝트와 완전히 분리된다.