해들리 위컴의 Advanced R 본문

Programming

해들리 위컴의 Advanced R

halatha 2018. 6. 22. 13:54

해들리 위컴의 Advanced R

원래 이 책을 읽으려는 이유는 지극히 개인적인 야구에 대한 관심 때문이었다. R에 대해서는 큰 관심은 없었고, 다만 세이버 매트릭스 관련 블로그를 보면 요즘에는 python도 많이 쓰지만 여전히 R로 데이터를 가공하는 경우가 많기 때문에 R을 알면 좀 더 재미있게 야구 블로그를 읽을 수 있을 거란 기대 때문이었다. 하지만 책을 펴고 나니 이 생각이 틀렸음을 알게 되었다. 베타 리더들의 이야기뿐만 아니라, 책의 시작 자체가 정말 제목 그대로 ‘Advanced’ user를 위한 책이었다. 일반적인 프로그래밍 기본 서적은 설치와 ‘hello world’를 출력하는데서 시작하지만, 이 책은 R의 데이터 구조부터 시작하며, 설치에 대한 안내는 부록으로도 제공하지 않는다 ㅜㅜ 저자는 서문에서 심지어 SICP https://mitpress.mit.edu/sites/default/files/sicp/index.html 를 거론하며 더 나은 프로그래밍을 하기 위해 필요한 일반적인 프로그래밍 서적들을 이야기하고, 마지막 두 챕터는 고성능을 위해 cpp와 c 연동 방식에 대해 설명한다.

그래서 일단 R을 설치하고 테스트하기 위해 매번 새로운 걸 할 때처럼 R의 docker image를 찾아보았다. 검색을 해서 https://hub.docker.com/_/r-base/ 를 찾아 가장 간단하게 interactive mode부터 하려고 docker run -ti — rm r-base 을 실행했다. 바로 print(“Hello World”)를 실행할 수 있었다.

Part I

그래도 비교적 쉽게 읽었다. 처음 접해서 문법이 어색하지만, 입력하고 실행하는데 어려움은 없었고, 이해가 되지 않는 부분도 없었다.

그래서 야구 관련 블로그 글 몇 군데서 코드를 (성급하게) 따라해보려고 했지만 역시나 잘 되지 않았다.

> library(tidyr)
Error in library(tidyr) : there is no package called ‘tidyr’

설치 오류이니 이 경우는

> install.packages(‘tidyr’)
https://www.r-bloggers.com/installing-r-packages/

이렇게 해결이 가능하다. 다만 baseball packages를 설치하기 위해서는 개발자 도구가 먼저 필요한데

> install.packages(“devtools”)

여기서 선행 설치가 필요한 library에서 dependency 오류가 발생해서 일단 원인 추적은 멈추고(아마 환경 설정 오류겠지), R Studio를 설치하기로 했다.

R Studio는 먼저 command line에서 r이 설치가 되어 있어야 해서 $ brew install r로 R을 설치한 후 https://www.rstudio.com/ 에서 desktop free version을 받아 R Stduio까지 설치를 했다. 이번에는 devtools 설치가 성공했다.

이렇게 브라우저에서 실행할 수 있는 환경도 쉽게 검색할 수 있고, R studio server를 이용하면 jupyter에서 R을 실행할 수도 있다고 하니, 코드를 따라해보는 데는 아무 문제가 없었다.

https://rdrr.io/snippets/
http://www.tutorialspoint.com/execute_r_online.php
http://www.compileonline.com/execute_r_online.php
https://www.r-bloggers.com/interactive-r-notebooks-on-powerful-cloud-hardware/

Part II

우선 기본적인 건 할 수 있게 되어 책을 계속 읽어보았다. 첫 번째로 아쉬운 점을 만났는데, 클로저에 대한 정의에 오류가 있었다(p185). 책에서는

함수를 만들고 반환하는 함수

이렇게 설명을 하고 있는데, 원문이 어떻게 되어있는지 모르겠지만, 이건 람다의정의로 보는 게 차라리 맞다. 클로저를 사용해서 함수를 만들고 반환할 수 있는 건 맞지만, 클로저라면 scope에 대한 이야기가 나와야 맞으며, Chapter 10.3에서는 해당 내용을 언급하고는 있지만, 이쪽에 포인트를 두지는 않는다. 보통 javascript쪽에서 클로저를 이렇게 설명하는 경우를 좀 봤는데, 역시 잘못 알고 있어서 그렇다.

https://simple.wikipedia.org/wiki/Closure_(computer_science)

Chapter 11의 기능(functional)에 대한 번역도 좀 어색하다. 역자가 서문에서 언급을 하긴 했지만, 여전히 이런 일종의 과한(?) 번역은 나에겐 어색하게만 느껴졌다. 참고로 이 장에서는 R의 apply에 대해 설명하는데, 역시 일반적인 함수형 프로그래밍에서의 apply처럼 함수에 값을 적용할 수 있게 하는 함수인 걸로 보인다

https://en.wikipedia.org/wiki/Apply

Chapter 12.1.3 느슨함은 lazy evaluation에 대한 이야기일텐데, 그냥 느슨함이라고 쓰면 이해를 제대로 하지 못하는 사람들이 있을 거 같다.

Part III, IV

후반부는 여러가지 깊은 programming 관련 주제를 이야기한다. 이 책이 확실히 R이라는 언어 자체에 대한 책이라는 점을 보여준다. 가끔 커뮤니티를 보면 R이 너무 느리고 대규모 데이터를 처리하기 어렵다고 이야기하는 사람들이 있고, 역자가 그건 R을 잘 몰라서 그렇고, 지원하는 package들이 있다고 하는데, 이 부분이 이 책의 범위를 벗어나는 주제라 볼 수 없어서 아쉬웠다. 고급 기법을 기대한 건 아니고, 그냥 간단한 parallel 실행에 대해 사례 정보만 보여줬으면 더 좋았을 거 같다(지극히 개인적인 아쉬움). 예제를 실행하는 데는 큰 어려움은 없었다.

Chapter 19.4 Rcpp 설탕인데, 역시 syntactic sugar를 설탕이라고 번역하는 부분은 매우 아쉽다.

Rcpp가 Chapter 20. C interface보다 먼저 나온 이유는 Rcpp가 메모리 관리 등 여러가지 측면에서 다 좋기 때문인 걸로 보인다.

> install.packages(‘pryr’)
> library(pryr)
> install.packages(‘inline’)

이 예제는 실패했는데 필요한 건 둘 다 설치한 거 같지만 오류가 발생했고, 원인은 아직 모르겠다.

etc

https://github.com/BillPetti/baseballr

좀 빨리 하긴 했지만, 해보고 싶었던 야구 관련 package를 따라하려고 R Studio에서 설치를 시도했지만 결국 실패했다(꽤 오래 걸림). 아직 R Studio log를 보는 게 불편해서 원인 분석은 못 했는데, 아마도 환경 변수 오류일 가능성이 높을 거 같다.

총평

책 자체는 R programming을 잘 하기 위해 잘 쓰여졌다고 생각한다. 여러가지 깊은 주제들도 대부분 언급을 했기 때문에 더 나은 수준을 가기 위해 필요한 발판이 될 수 있다. 번역 부분은 개인적으로 조금 아쉽지만, 이건 사람에 따라 시각이 다를 수 있으므로, 단정지어 말하긴 어렵다. 전체적으로 볼 때 좋은 책이다.

Advanced R.zip


Comments