Documentation with R and TeX

TeX를 바탕으로 RMarkdown 또는 Quarto를 활용한 문서 작성을 설명하는 기초 자료입니다.

Introduction to TeX

과학적 글쓰기를 하는 데 있어서 왜 LaTeX 를 굳이 사용해야 하는 것일까요? 대체 LaTeX 가 MS 워드 또는 다른 오피스 프로그램보다 더 나은 점은 무엇일까요? 일단 LaTeX 를 사용하는 것에는 크게 두 가지 이유가 있습니다. 첫째는 바로 ’미학적(aesthetic)’이기 때문입니다. 조판 프로그램인 LaTeX 를 이용하여 문서를 작성할 경우 처음부터 끝까지 일관된 양식으로 정연하게 글을 작성할 수가 있습니다. 또한 수학적 기호나 통계표 등을 가독성 있게, 쉽게 작성할 수 있다는 장점이 있습니다. 두 번째 이유는 LaTeX 사용이 학계에서 일종의 심볼처럼 사용되고 있다는 것입니다. LaTeX를 사용함으로써 학계의 다른 일원들에게 굉장히 높은 수준의 컴퓨팅 또는 프로그래밍 기술을 갖추고 있다는 것을 은연중에 나타낼 수 있습니다.

LaTeX as a Computer Program

LaTeX 는 프로그래밍 언어입니다. R과 마찬가지로 LaTeX 코드를 실행하기 전에 필요한 패키지들을 확인하고 불러와야 합니다. 이 부분에 대해서는 Overleaf 라고 하는 온라인 LaTeX 프로그램의 기본 템플릿을 통해 살펴보겠습니다.

LaTeX 코드를 실행할 때, 이를 컴파일링(Compiling)한다고 말합니다. 즉, 코드를 실행하여 실제의 PDF 결과물을 산출하는 작업을 의미합니다.

  • 이러한 컴파일링을 실행하는 도구로는 여러 가지가 있습니다. LaTeX 에서는 이를 엔진(engine)이라고 합니다. 기본적으로 설정되어 있는 엔진은 pdflatex 입니다.

  • LaTeX 코드를 통해 그림을 삽입하거나 혹은 표를 작성할 경우, 그 결과물이 PDF로 나타납니다.

Error Messages

LaTeX 에는 크게 두 가지 종류의 에러 메세지가 존재합니다. 첫번째는 터미널 에러(terminal errors)로 코드를 제대로 끝마치지 않아 발생하는 에러입니다. 터미널 에러가 발생하면 대개 최종 문서 결과물이 산출되지 않습니다. 둘째는 비터미널 에러(non-terminal errors)로 수학적 표기를 하기 위한 코드를 수학기호 모드 밖에서 작성하거나 하는 경우에 발생합니다. 이 경우에는 문서가 PDF로 생성은 되지만 수학기호 등이 에상한 것과는 다른 형태로 입력되서 나타납니다.

특히, 기호(symbols)는 프로그래밍 언어인 LaTeX 내부에서 별개의 의미를 가지고 있을 수 있습니다. 이것을 고려하지 않고 기호를 그냥 본문에 작성할 경우, LaTeX 컴파일링이 이루어지지 않을 수 있습니다. 대표적인 경우가 바로 % 입니다. 실제로 본문에 % 를 나타내고자 한다면, LaTeX 코드로 \% 라고 작성해야 문자로서 % 를 인식하라는 명령이 됩니다.

Doc Basics

백슬래시(\)는 LaTeX 로 하여금 백슬래시 뒤의 문자열을 일반적인 텍스트가 아니라 컴퓨터 코드로 인식하라는 명령어이다. LaTeX 에서 일반적으로 사용되는 커맨드(R로 치면 함수)는 대개 백슬래시로 시작한다.

LaTeX 스크립트는 기본적으로 크게 세 가지 섹션으로 나누어서 살펴볼 수 있다.

Preamble

이 섹션에는 크게 네 가지 내용이 들어갑니다.

  1. LaTeX가 어떤 유형의 문서를 만들 것인지를 선언해줍니다. 일반적으로는 아티클 유형의 문서를 만들 때는 \documentclass{article} 이라고 선언해줍니다. 그 외에도 발표자료를 만들때는 \documentclass{beamer}, 책을 만들고 싶을 때는 \documentclass{book} 을 선언해주면 됩니다.
  2. 문서를 시작하기 전에 기본적인 셋업을 해줍니다. 예를 들어, LaTeX가 어떤 패키지를 사용할 것인지를 지정해줍니다. \usepackage{NAME} 으로 패키지 이름을 지정해주면, 사용할 패키지를 설정할 수 있습니다.
  3. 줄간격과 같은 추가적인 셋업을 해줍니다(예: linespread{1.5}는 1.5 줄간격을 의미).
  4. 참고문헌(references)을 포맷팅 할 수 있도록 natbibbibtex 에 옵션을 추가해줍니다.

Content

문서의 시작은 항상 \begin{document} 로, 끝은 \end{document} 로 마무리합니다. 이 두 명령어 사이에 놓이는 것들이 문서의 본문 내용이 됩니다. 기본적인 텍스트들 이외에도 다음과 같은 내용들을 포함하게 됩니다:

  1. 그림(floats): 텍스트 사이에 위치하게될 이미지나 그래프
  2. 표(tables): 간단한 교차표(crosstabs)부터 회귀분석 결과 등
  3. 리스트(lists): 순서가 없는 글머리(unordered bullet points)나 순서를 가진 글머리(ordered list, often numbered)

Content Commands

LaTeX에서도 워드와 마찬가지로 텍스트를 굵게하거나 기울일 수 있습니다. 다만 조금 복잡한 방식으로 명령어를 제시해야 같은 결과를 얻을 수 있습니다. 가장 기본적인 텍스트 강조 방식 세 가지를 살펴보겠습니다.

  1. \textbf{}: 글씨를 굵게
  2. \emph{}:강조할 때 사용하고 기본적으로는 이탤릭체, 혹은 \textit{}
  3. \textt{} 타자기 텍스트(예를 들어 이런 폰트)

다음의 문장을 LaTeX 를 이용해서 출력해보자:

나는 타자기 폰트를 좋아합니다. 왜냐하면 데이터를 이해하는 데 도움을 주기 때문입니다.”

Sections

LaTeX는 섹션이라고 하는 헤더를 가지고 있습니다. 일반적으로 논문을 작성할 때의 장, 절, 항과 같은 것이라고 생각하면 됩니다. 각 섹션에는 숫자를 붙일 수도, 안 붙일 수도 있습니다. 기본값은 숫자를 붙이는 것입니다. 숫자를 원하지 않을 경우에는 *를 붙여주면 됩니다. 즉, \section{My Section}1. My Section이라는 결과를 출력하는 반면, \section*{My Section}My Section 이라고만 결과를 출력합니다. 또한 섹션 앞에 sub를 붙이면, 섹션의 수준을 조절할 수 있습니다. 예를 들어, \subsection{My Subsection}1.1 My Subsection 이라는 결과를 출력할 것입니다.

Intro to Floats

그림을 본문에 추가하기 위한 코드는 다음과 같습니다:

\begin{figure}[!h]
  \begin{center}
    \includegraphics[scale = .3]{"images/1-tex-wrapfig-png"}
  \end{center}
\end{figure}

  • 그림의 크기를 키우고 싶으면 어떻게 해야 할까요?

  • 오른쪽으로 정렬하려면 어떻게 해야 할까요?

  • 그림을 회전시키려면 어떻게 해야 할까요?

  • 이 그림에 \label 이라는 명령어를 추가할 경우, 문서 내에서 이 그림에 링크되는 문서 간 레퍼런스를 만들 수 있습니다.

\begin{figure}[!h]
  \begin{flushright} 
    \caption{Asmallercrookedgull} 
    \label{gull} 
    \includegraphics[angle=34,totalheight=0.5 \textheight]{"images/wrapfig-png"}
  \end{flushright} 
\end{figure}
A Note on Float Placement

그림의 좋은 점은 제어할 수 있는 방법이 여러 가지 라는 점입니다. 반면에, LaTeX가 그다지 똑똑하지 않아서 종종 그림을 엉뚱한 위치에 놓는다는 문제도 있습니다.

\begin{figure} 이후에, [] 를 이용해서 위치를 특정합니다. 즉, 그림을 항상 위에, 혹은 항상 아래에 위치하게끔 강제하는 것입니다. 대개 페이퍼를 작성하거나 할 때에는 그림이 해당 내용에 관한 텍스트의 위치에 정확하게 위치하기를 원할 것입니다. 이 경우에는 다음과 같은 옵션을 추가해주면 됩니다: float 패키지를 설치하고(\usepackage{float}) \begin{figure}[H] 라고 옵션을 주면 됩니다.

Referencing Floats

그림을 \label로 라벨링하게 되면 이 그림을 텍스트에서 링크를 걸 수 있습니다. 라벨에 대해 \ref 커맨드를 사용하면 됩니다. 예를 들어서, 갈매기를 보여주는 그림 \ref{gull} 이라고 하면 그림 1 이라고 삽입되면 숫자 1에는 해당 그림에 하이퍼링크가 걸리게 됩니다.

Intro to Tables

R에서는 여러 가지 패키지를 이용하여 분석 결과를 LaTeX 커맨드로 출력할 수 있습니다. xtable, knitr, texreg, stargazer 등이 그러한 패키지입니다. 간단한 회귀분석 결과를 표로 나타내 보겠습니다.

library(tidyverse)
lm(carat ~ depth + x + y + z, data = diamonds) |> 
  texreg::texreg(
    caption = "This is a table reporting regression results",
    label = "tbl-1")

위의 표를 출력하는 LaTeX 코드는 다음과 같습니다:

\begin{table}
\begin{center}
\begin{tabular}{l c}
\hline
 & Model 1 \\
\hline
(Intercept) & $-2.64^{***}$ \\
            & $(0.02)$      \\
depth       & $0.02^{***}$  \\
            & $(0.00)$      \\
x           & $0.40^{***}$  \\
            & $(0.00)$      \\
y           & $0.01^{***}$  \\
            & $(0.00)$      \\
z           & $0.00$        \\
            & $(0.00)$      \\
\hline
R$^2$       & $0.95$        \\
Adj. R$^2$  & $0.95$        \\
Num. obs.   & $53940$       \\
\hline
\multicolumn{2}{l}{\scriptsize{$^{***}p<0.001$; $^{**}p<0.01$; $^{*}p<0.05$}}
\end{tabular}
\caption{This is a table reporting regression results}
\label{tbl-1}
\end{center}
\end{table}

Intro to Lists

Key Tips

MS 워드나 나른 프로그램을 사용하다보면, 완벽한 글머리 목록을 만들기 위해서 시간을 많이 낭비하는 경험을 한 적이 있을 것입니다. 하지만 LaTeX에서는 처음에 설정을 제대로 해 주면 일관된, 체계적인 글머리 목록을 만드는 데 큰 시간이 들지 않습니다.

Itemize

\begin{itemize}는 LaTeX에서 넘버링 되지 않은 글머리 목록을 만드는 방법으로, \begin{itemize}\end{itemize} 사이에 \item 명령어를 통해 목록을 포함시킬 수 있습니다.

Enumerate

\begin{enumerate}는 LaTeX에서 넘버링된 글머리 목록을 만드는 방법으로, \begin{enumerate}\end{enumerate} 사이에 \item 명령어를 통해 목록을 포함시킬 수 있습니다.

Nested Lists

begin{itemize}\end{itemize} 내부에 \begin{enumerate}, \end{enumerate} 를 삽입하거나 혹은 그 반대의 경우, 넘버링/넘버링 되지 않은 글머리 목록이 서로 중첩되서 다른 수준으로 포함될 수 있습니다.

Math Pitch

Basic Math Modes

수학 모드에는 기본적으로 두 가지 방식이 있습니다. 하나는 인라인 텍스트 모드이고 다른 하나는 분리형 라인 모드(separate line mode)입니다.

  • 인라인 텍스트 모드는 본문 안에 이렇게 수학 공식을 삽입하는 것을 말합니다: \(f(x) = x2 + e^{\sqrt{2}}\).

    • LaTeX 는 사용자가 수학 모드에서 글을 작성하고 있다는 것을 달러 사인(하나: 인라인 모드/둘: 분리형 모드)으로 인식합니다: $f(x) = x2 + e^{\sqrt{2}}$
  • 분리형 라인 모드는 수학 공식을 별개의 라인으로 표시합니다:

    \[ y = \beta_0 + \beta_1 + \beta_2 + \dots + \beta_n + \varepsilon \]

Subscripts and Superscripts

자주 쓰는 수학 기호들을 한 번 살펴보겠습니다.

  • ^는 윗첨자를, _는 아랫첨자를 나타냅니다.

  • $x^2$\(x^2\) 를, $x_2$ 는 $x_2$ 로 출력됩니다.

  • 그렇다면 \(x^{2^x}\) 를 나타내려면 어떻게 해야 할까요?

  • $x^{2^x}$

  • \(X^{e^{5{x^2}}}\) 를 한 번 출력해보세요.

Greek

LaTeX에서 수학 기호는 직관적인 커맨드로 나타낼 수 있습니다. 그리스 알파벳 소문자는 모두 소문자로 쓰면 됩니다. $\gamma$\(\gamma\)로 나타납니다. 그리스 알파벳 대문자는 첫 번째 문자를 대문자로 작성하면 됩니다. $\Gamma$\(\Gamma\).

  • \(\mu, \nu, \tau, \Sigma, \Gamma, \Xi, \Upsilon\) 를 LaTeX 커맨드로 나타내보세요.
More Math

만약 수학 공식에서 변수명 등을 포함하고 싶다면 어떻게 해야할까요? 직접적으로 텍스트를 수학 공식에 집어 넣으면 공백이 반영되지 않고 못생긴 이탤릭체로 나타납니다. 대신 \mathrm{} 커맨드를 사용하세요.

\begin{equation}
  \mathrm{Vote Choice}_i = \beta_0 + \beta_1 \mathrm{Party ID}_i + \varepsilon_i
\end{equation}
\[\begin{equation} \mathrm{Vote Choice}_i = \beta_0 + \beta_1 \mathrm{Party ID}_i + \varepsilon_i \end{equation}\]
More Math Modes

수학 공식을 나타내는 방식은 여러가지입니다. 예를 들어, begin{eqnarray}를 사용하면 여러 공식들의 묶음으로 나타낼 수 있습니다.

\[\begin{eqnarray} \mathrm{Vote Choice}_i = \beta_0 + \beta_1 \mathrm{Party ID}_i + \varepsilon_i\\ \mathrm{Vote Choice}_i = \beta_0 + \beta_1 \mathrm{Party ID}_i + \beta_2 \mathrm{Ethnic}_i + \varepsilon_i \end{eqnarray}\]

Postscript

RMarkdown and Quarto

이 워크샵에서는 R을 통해 동적(dynamic) 문서작업을 가능하도록 도와주는 도구인 RMarkdownQuarto를 소개하고자 합니다. RMarkdownQuarto의 장점은 텍스트 자료와 R 코드를 결합하여 문서화할 수 있다는 것입니다. RMarkdownQuarto를 이용하면 R로 산출한 통계 결과를 더 쉽고 간단하게 보여줄 수 있습니다.

RMarkdownQuarto는 HTML, PDF, Microsoft Word 등과 같은 다양한 포맷의 문서로 최종 결과물을 만들 수 있습니다. 여기서는 Quarto을 이용한 동적 문서화 예시들을 주로 보여드리도록 하겠습니다. Quarto을 이용해서 CV, 학회 발표자료, 그리고 웹페이지 등 다양한 유용한 결과물들을 만들 수 있습니다. 이 워크샵은 기초 단계의 RMarkdownQuarto를 소개하는 데 목적이 있기 때문에 HTML, PDF, 그리고 Word 파일로 문서화하는 방법에 대해 집중적으로 다루도록 하겠습니다. 이후로는 편의상 총괄하여 Quarto라고 하겠습니다.


RMarkdownQuarto를 사용하는가?

Quarto를 통한 문서 작성 및 자동화의 이점은 크게 두 가지라고 할 수 있습니다:

  1. 편리하기 때문입니다. 특히, R을 통계분석에 이용할 경우, Quarto은 통계분석 결과를 쉽게 문서화할 수 있고, 나아가 재생산가능한(reproducible) 문서를 작성하는 데 도움을 줍니다.

  2. 유연하기 때문입니다. Quarto은 문서 템플릿이 고정된 것이 아니라 자신의 선호에 따라서 설정을 바꾸어 문서를 일관되게, 필요한 형태로 재생산할 수 있습니다.

초기 셋업 (Initial Setup)

먼저 Quarto에 대해 이야기하기에 앞서 다음과 같은 작업이 필요합니다.

  1. R을 다운로드

  2. RStudio 다운로드

  3. https://quarto.org/docs/get-started/ 에 접속하여 자신의 OS에 맞는 Quarto 설치

  4. PDF나 Word로 결과물을 만들고 싶을 때는 LaTeX 도 설치해 주어야 합니다.

Quarto 문서를 열어보기

Quarto 문서 작성을 시작하기 위해서 아래의 단계대로 따라가 보도록 하겠습니다.

  1. Rstudio를 엽니다.

  2. File > New File > Quarto Document

  3. 제목과 작성자를 적습니다.

  4. output 포맷을 선택하고 OK를 클릭합니다.

  5. Quarto 기본 서식이 만들어졌습니다.

이제 Quarto을 사용할 준비가 되셨습니다.

Quarto의 구조

기본적으로 Quarto 문서는 네 가지의 구성요소로 이루어져 있습니다. YAML, 코드청크(Code chunks), 양식에 맞춘 텍스트, 그리고 인라인 코드(Inline code)가 바로 그것인데요.


YAML

  • YAMLQuarto 내의 데이터를 문서화하기 위해 세운 규칙을 타 시스템과 주고받기 용이하도록 포맷을 정의하는 일종의 규칙입니다.

  • 따라서 YAML에는 문서화 전반에 필요한 설정을 작성합니다.

  • YAML을 통해서는 다음과 같은 설정이 가능합니다.

    • 폰트 (사이즈와 종류)

    • 그림(figure)에 대한 디폴트 설정 (높이, 너비 등)

    • 문서의 커스터마이징을 위한 CSS (Cascading Style Sheets) 코드 등

title: "Introduction to Quarto"
author: "Sanghoon Park"
date: "May 5, 2021"
format: pdf
mainfont: "Arial"
editor: visual
css: customcss.css

형식화된 텍스트 (Formatted Text)

  • Quarto은 텍스트 형식에 있어서 굉장히 간소화된 양식을 제공합니다.

  • 글씨를 기울이고 싶다면 *italics* 또는 _italics_를 사용할 수 있습니다. \(\rightarrow\) italics

  • 글씨를 굵게하고 싶다면 **bold** 또는 __bold__를 사용할 수 있습니다. \(\rightarrow\) bold

  • 글씨에 취소선을 넣고 싶다면 ~~strikethrough~~를 사용할 수 있습니다. \(\rightarrow\) strikethrough

  • 글씨에 링크를 넣고 싶다면? [UofSC](www.sc.edu) \(\rightarrow\) UofSC

  • 윗첨자, 아랫첨자는 각각 superscript^2^, subscript~2~ \(\rightarrow\) superscript2, subscript2

마찬가지로 HTML 문법도 Quarto 내에서 사용 가능합니다.

  • <i>italics</i> \(\rightarrow\) italics

  • <b>bold</b> \(\rightarrow\) bold

Section Headings

Quarto에서는 Latex에서보다 간편하게 섹션의 제목을 설정할 수 있습니다. Latex라면 아마 \section{Header 1}이라고 해야하지만Quarto에서는 간단하게 # Header 1이라고 할 수 있습니다.

  • # Header 1 \(\rightarrow\)

Header 1

  • ## Header 2 \(\rightarrow\)

Header 2

  • ### Header 3 \(\rightarrow\)

Header 3

  • #### Header 4 \(\rightarrow\)

Header 4


목록화 (Lists)

순서없는 목록 (Unordered List)

- Item
+ Sub-item
- Item
- Item


  • Item

    • Sub-item
  • Item

  • Item

순서형 목록 (Ordered List)

1. Item Number 1
2. Item Number 2
+ Sub-item
3. Item Number 3


  1. Item Number 1
  2. Item Number 2
  • Sub-item
  1. Item Number 3

줄바꿈 (Line Breaks)

  • 문단을 나누는 게 아닌, 단순 줄바꿈은 Quarto에서 좀 헷갈리는 부분입니다. 줄바꿈을 하기 위해서는 해당 문장의 맨 뒤에서 두 번의 스페이스로 공백을 만들어주어야 합니다.

  • 만약 문단 간 한 줄 이상의 줄바꿈을 하고 싶다면, <br>이라는 HTML 코드를 사용하여 줄바꿈을 강제로 해줄 수 있습니다.

예를 들어:
줄바꿈을 해주기 위해서는 반드시 공백을 두 번 넣어주어야 합니다.
그러면 줄바꿈이 됩니다.

만약에 줄바꿈을 해주려고 하는데 공백을 두 번 안 넣을 경우 줄바꿈이 되지 않습니다.


코드청크 (Code Chunks)

코드청크는 Quarto의 가장 매력적인 요소로, R로 분석한 내용을 문서에서 구현할 수 있는 기능을 가집니다. 코드청크를 작성하기 위해서는 Ctrl + Atl + I를 눌러주시면 됩니다. 이때, 코드청크에서의 `는 따옴표가 아니라 ESC 버튼 아래에 있는 백틱(backtick) 버튼입니다.

그러면 이제 간단한 연산을 해보도록 하겠습니다.

x <- 7
y <- 6
x * y
[1] 42

한 번 Quarto에서 해당 값을 객체에 지정했다면, 다음 청크에서도 연달아 사용이 가능합니다.

x > y
[1] TRUE

코드청크를 이용하여 표 만들기

코드청크를 이용해서 표를 만들 수도 있습니다.

mycars <- mtcars[1:2, 1:6]
mycars
              mpg cyl disp  hp drat    wt
Mazda RX4      21   6  160 110  3.9 2.620
Mazda RX4 Wag  21   6  160 110  3.9 2.875

R에는 이 데이터를 표로 바꾸어주는 여러 패키지들이 존재합니다.

knitr::kable(mycars, caption = "Motor Trend Car Table") 
Motor Trend Car Table
mpg cyl disp hp drat wt
Mazda RX4 21 6 160 110 3.9 2.620
Mazda RX4 Wag 21 6 160 110 3.9 2.875
options(xtable.comment = F)
print(xtable::xtable(mycars,caption = "Motor Trend Car Table"), 
      type='html', html.table.attributes="border=2")
Motor Trend Car Table
mpg cyl disp hp drat wt
Mazda RX4 21.00 6.00 160.00 110.00 3.90 2.62
Mazda RX4 Wag 21.00 6.00 160.00 110.00 3.90 2.88

이때, {xtable} 패키지는 결과를 HTML 코드로 나타내기 때문에, HTML 코드를 마크다운으로 인식시켜주기 위하여 코드청크 설정에 results = 'asis'를 설정해줍니다.

코드청크를 이용해 플롯 만들기

코드청크로 분석결과를 플롯으로 나타낼 수도 있습니다.

library(ggplot2)
gg <- ggplot(mtcars, aes(hp, mpg)) +
        geom_point(aes(color=as.factor(cyl)), size=5) +
        geom_smooth(method="lm", se=FALSE) +
        labs(x = "Horsepower",y= "Miles Per Gallon", 
             color= "# of Cylinders") +
        theme_bw()
gg
`geom_smooth()` using formula = 'y ~ x'

코드청크의 옵션

코드청크는 몇 가지의 옵션을 가질 수 있습니다.

'''{r name}  
#| eval: false
#| warning: false
#| message: false
SOME CODE GOES HERE  
'''
  • name: 필수적인 것은 아니지만 코드청크에 라벨을 붙일 수 있는 기능입니다. 습관이 되면, 어떤 청크가 어떤 기능을 수행하는지 간단한 라벨로 코멘트를 달아두기에 좋습니다. 하지만 코드청크의 라벨은 중복될 수 없기에 주의가 필요합니다.

  • echo: 코드청크 내 코드를 문서에 보여줄지, 혹은 결과만 보여줄지에 관한 옵션입니다. 만약 문서에서 코드가 작동하게는 하고 싶지만 문서 결과에 보여주고 싶지 않다면 echo: false로 설정하면 됩니다.

  • eval: 코드청크 내 코드를 실제로 구동할지에 관한 옵션입니다. 만약 코드를 보여주고는 싶지만 실제로 돌아가게 하고 싶지 않다면 eval: false로 설정하면 됩니다.

  • warning: 문서에 코드청크 내 R 구동 결과 중 경고문을 보이게 할지에 관한 옵션입니다.

  • message: R 코드와 관련된 패키지 등으로부터의 메시지를 문서에 출력할 것인지에 관한 옵션입니다.

  • results: R 코드의 컴퓨팅 결과를 실제로 보여줄 것인지, 어떻게 보여줄 것인지에 관한 옵션입니다.

  • 디폴트 옵션은 echo, eval, warning 그리고 messagetrue입니다. 아래는 코드청크의 옵션 중 warning: true, 그리고 message: true인 경우입니다.

library(tidyverse)

꼴보기 싫으니 이 설정을 꺼보겠습니다. warning: false, message: false.

library(tidyverse)

그 다음으로는 echo: true 옵션을 보겠습니다.

n <- 7 * 6
n
[1] 42

그러면 echo: false로 설정하면 어떻게 될까요?

[1] 42

eval: false로 설정해보겠습니다. 이 경우, 코드는 보이지만 실제로 작동하지는 않기 때문에 이 코드청크에서 입력한 코드는 다음 청크에서 사용할 수 없습니다.

n <- 7 * 6
n

results: hide 옵션을 걸면 eval: false와 비슷한 결과를 얻습니다. 하지만 이 경우에 코드는 실제로 돌아가고 분석 결과만 나오지 않는 것이기 때문에 다른 청크에서 저장된 코드의 내용을 활용할 수 있습니다.

n <- 7 * 6
n

코드청크의 플롯팅 옵션

'''{r name}  
#| fig-height: 6
#| fig-width: 4
#| fig-align: center
#| fig-dpi = 300
SOME CODE GOES HERE  
'''
  • fig-height, fig-width: 코드청크에서 만들어낸 플롯의 높이와 너비의 비율을 설정하는 옵션

  • fig-dpi: 인치 당 픽셀을 설정하는 옵션으로 효과적으로 플롯 내의 텍스트와 선 등의 크기를 조정할 수 있습니다. 너무 낮게 설정할 경우에 픽셀이 깨져보입니다.

  • fig-align: 플롯을 우측, 좌측, 혹은 가운데 정렬하는 옵션

앞서 그려봤던 플롯을 fig-height: 6, fig-width: 9, fig-dpi: 75, 그리고 fig-align: center로 설정해 보겠습니다.

`geom_smooth()` using formula = 'y ~ x'

이번에는 fig-height: 4, fig-width: 6, fig-dpi: 300, 그리고 fig-align: right로 설정해보겠습니다.

gg
`geom_smooth()` using formula = 'y ~ x'

만약에 동적인 플롯(interactive plots)을 작성하고 싶다면, HTML 결과에 한해서 `{plotly}` 패키지를 이용해 작성할 수 있습니다.

library(plotly)
ggplotly(gg)

인라인 코드 (Inline Code)

인라인 코드는 데이터가 업데이트되면 문서도 자동으로 업데이트 되도록 동적 문서화를 가능하게 해주는 기능입니다. 만약 데이터에 따라서 달라지는 값을 넣어야하는 경우가 있다면, 인라인 코드를 사용하는 것이 편합니다. 예를 들면:

  • 숫자형 값 또는 퍼센티지 값

  • 통계 검정 결과 (e.g., F-값, 자유도, p-value 등)

  • 숫자형 값에 대한 텍스트 (e.g., 어떤 값이 증가, 감소, 또는 동일하게 유지되는지)

  • 시간과 관련된 변수들 (e.g., 문서 내에서 어떤 시간을 언급할 경우)

인라인 코드는 `r 로 시작해서 `(백틱)으로 닫습니다.

Some text 'r CODE GOES HERE' some more text.

예를 들어, 데이터가 매달 새롭게 수집되고, 그에 따라 어떤 문장을 업데이트하여 작성하고 싶다고 합시다. 일단 데이터는 다음과 같습니다.

lastmon <- 4.7
lmon <- "May"
thismon <- 4.9
tmon <- "June"

그리고 인라인 코드를 이용해서 다음과 같은 문장을 작성해 보겠습니다.

The unemployment rate in `r tmon` was `r paste0(thismon, "%")`,
`r ifelse(thismon < lastmon, paste0(" down ",
paste0(abs(thismon-lastmon),"% from ")),
ifelse(thismon > lastmon, paste0(" up ",
paste0(abs(thismon-lastmon),"% from ")),"
unchanged from "))` `r paste0(lastmon, "%")` in `r lmon`

이 인라인 코드는 다음과 같이 나타납니다.

  • The unemployment rate in June was 4.9%, up 0.2% from 4.7% in May

RStudio v1.4: Visual Markdown Editing

RStudio는 1.4 버전부터 Visual Markdown Editing이라는 기능을 제공하고 있습니다. 구체적인 기능들은 링크를 통해 확인하실 수 있습니다.

마크다운 문법의 결과가 바로 시각적으로 반영되어 문서화 결과를 예측하기 쉽게 만들어주는 기능입니다. 동시에 헷갈릴 수 있는 문법, 기능들을 버튼 식으로 내장하여 사용자의 편의를 제고하였습니다.

특히 인용(citation) 기능은 Zotero 사용자의 경우, 로컬 컴퓨터의 Zotero의 라이브러리와 연동하여 인용을 쉽게 도와줍니다. 인용도 상대적으로 간편한데, @acemoglu:2008, [@acemoglu:2008]와 같은 식으로 입력하면 인용이 가능합니다. 다만 bibliography의 경우에는 YAML에서 별도의 설정을 해주어야 원하는 양식에 맞추어 작성할 수 있습니다.

Introduction of Visual Mode in RStudio

결과물 출력

모든 준비가 끝난 후 knit 버튼을 누르면 문서는 원하는 포맷으로 출력할 수 있습니다. HTML은 기본적으로 가능하고, PDF 또는 Word 파일로 출력하고 싶을 경우에는 Latex 설치가 필요합니다.

추가 참고자료