2.1 목적과 사용 방법
R Markdown은 R output이 보고서에 포함되는 경우에 사용을 권장한다. 즉, R로 자료 분석을 하고, 보고서/논문을 작성하는 경우 매우 권장된다.
주요 기능은
- R의 script, text output, figure, table 등을 문서에 포함시키기
- 목차 만들기 (표 목차, 그림 목차 포함)
- 문서내 표, 그림, 본문의 위치 등에 대한 상호 참조 만들기
- 참고문헌 만들기
- 색인 만들기
등이다.
위에서 첫 번째 것을 제외한 것들은 TeX가 잘하는데, 사용법이 복잡한 것이 걸림돌이다.
그런데, R Markdown은 첫 번째 것에다가 TeX에서 주요한 기능만 간단히 쓸 수 있게 만든 셈이다.
R Markdown file은 simple ASCII text file이다. 따라서, AcroEdit 등의 editor를 사용하여 작성한다.
이 파일의 확장자는 주로 .Rmd 이다.
Rmd file을 compile하여 pdf, html 등의 output을 만들 수 있다. MS-Word file 형식(.docx, .rtf)으로 만들 수도 있으나 아직 완성도가 높지는 않다.
Compile하려면 rmarkdown package와 pandoc을 설치하여야 한다.
PDF output을 만드려면 TeX가 있어야 하는데, 같은 저자가 만든 TinyTeX를 사용하면 편리하다.
(설치방법은 1장 참고)
한글이 포함되는 경우 utf-8 코딩 형식으로 저장한다.
이 장에서는 주로 pdf output을 만들기 위한 과정을 설명한다.
이 장에서는 RStudio를 사용하지 않으며, Rmd file 내에 YAML header를 최소한 사용하여 작업하는 방법을 설명한다.
한글이 포함된 pdf output을 만들기 위해서는 xelatex engine을 사용하는 것이 좋다.
R Markdown 관련 자세한 정보는 홈페이지(rmarkdown.rstudio.com)에서 볼 수 있다.
R Markdown 저자의 책은 R Markdown: The Definitive Guide에서도 볼 수 있다.
기본적인 사용법은 R Markdown cheetsheet나 R Markdown reference guide를 참고할 수 있다.
예들 들어, 다음과 같은 text file을 utf-8 format으로 저장한 후,
Hello, World!
안녕, 세상!
다음과 같은 R script를 실행해 보면 output file이 생성되는 것을 볼 수 있다.
setwd("C:/Rmd/Hello")
require(rmarkdown)
render("Hello.Rmd") # to HTML
render("Hello.Rmd", output_format=word_document()) # to docx
render("Hello.Rmd",
pdf_document(latex_engine='xelatex', toc=F, number_section=T,
pandoc_args=c("--variable", "mainfont=KoPubWorldBatang Medium",
"--variable", "sansfont=KoPubWorldDotum Medium",
"--variable", "monofont=NanumGothicCoding",
"--variable", "linkcolor=cyan"))) # to PDF
위의 내용을 text editor로부터 copy하고 R console 창에 paste하여 실행할 수도 있지만,
위의 pandoc_args는 render 함수에서 지정해 주지 않으면, Rmd file 내에 YAML header로 써 주어야 하는데, 저자는 pandoc_args 형태로 쓰는 것을 선호한다.
위 파일을 text file로 (예를 들어, Compile.R) 저장 후 도스 명령어 창에서 다음과 같이 하여 실행할 수도 있다.
Rscript Compile.R
만약 어떤 LaTeX package를 포함시켜 작업하고 싶다면 render() 함수에 다음과 같이 “header-include=”에 해당하는 부분을 필요한 만큼 더하면 된다.
render("Hello.Rmd",
output_file=paste0("Hello", substr(gsub('-|:| ', '', Sys.time()), 1, 12), ".pdf"),
output_format=pdf_document(latex_engine='xelatex', toc=F, number_section=T,
pandoc_args=c("--variable", "mainfont=KoPubWorldBatang Medium",
"--variable", "sansfont=KoPubWorldDotum Medium",
"--variable", "monofont=NanumGothicCoding",
"--variable", "header-includes=\\usepackage{tcolorbox}",
"--variable", "linkcolor=cyan"))) # to PDF
pandoc_args 로 넘기기에는 양이 너무 많으면 다음과 같이 필요한 TeX file을 추가해 줄 수 있다.
render("Hello.Rmd",
output_file=paste0("Hello", substr(gsub('-|:| ', '', Sys.time()), 1, 12), ".pdf"),
output_format=pdf_document(latex_engine='xelatex', toc=F, number_section=T,
pandoc_args=c("--variable", "linkcolor=cyan"),
includes=includes(in_header="preamble.tex",
before_body="before_body.tex",
after_body="after_body.tex")))