R Markdown 보고서 작성
R 코드와 분석 결과, 그리고 설명 텍스트를 하나의 문서로 만들 수 있습니다. 데이터가 업데이트되면 보고서 전체를 다시 실행해 최신 결과를 자동으로 반영합니다. 이것이 재현 가능한 연구(Reproducible Research)의 핵심입니다.
R Markdown이란
.Rmd 파일은 세 가지 요소로 구성됩니다.
1. YAML 헤더 : 문서 메타데이터 (제목, 저자, 출력 형식 등)
2. 마크다운 텍스트 : 일반 설명 글
3. 코드 청크 : R 코드와 실행 결과
RStudio에서 File → New File → R Markdown으로 새 파일을 만들거나, 확장자를 .Rmd로 저장합니다.
YAML 헤더
파일 최상단에 ---로 감싸서 작성합니다.
---title: "mtcars 데이터 회귀분석 보고서"author: "홍길동"date: "`r Sys.Date()`"output: html_document: toc: true # 목차 생성 toc_float: true # 스크롤 따라오는 목차 toc_depth: 3 # 목차 깊이 (H1~H3) number_sections: true # 섹션 번호 자동 theme: flatly # 부트스트랩 테마 highlight: tango # 코드 하이라이팅 fig_width: 7 fig_height: 5 df_print: kable # 데이터프레임 출력 형식---
# PDF 출력 (한글 지원 위해 xelatex 엔진 사용)output: pdf_document: latex_engine: xelatex toc: true number_sections: true fig_caption: trueheader-includes: - \usepackage{kotex} # 한글 패키지 - \usepackage{booktabs}
# Word 출력output: word_document: toc: true reference_docx: "my_template.docx" # 사용자 정의 스타일 적용
코드 청크 옵션
```{r chunk-name, echo=TRUE, message=FALSE, warning=FALSE}
# R 코드
library(ggplot2)
ggplot(mtcars, aes(x = wt, y = mpg)) + geom_point()
```
자주 쓰는 청크 옵션입니다.
# echo : TRUE/FALSE — 코드를 문서에 보여줄지 여부
# message : TRUE/FALSE — 패키지 로딩 메시지 표시 여부
# warning : TRUE/FALSE — 경고 메시지 표시 여부
# eval : TRUE/FALSE — 코드를 실제로 실행할지 여부
# include : TRUE/FALSE — 코드와 결과를 모두 숨길지 여부
# results : "markup", "hide", "asis" — 출력 처리 방식
# fig.width : 그래프 너비 (인치)
# fig.height : 그래프 높이 (인치)
# fig.cap : 그래프 캡션
# fig.align : "left", "center", "right"
# cache : TRUE — 결과를 캐시하여 재실행 시 빠르게 처리
전체 문서에 공통 옵션 설정하기
# 문서 최상단 설정 청크 (보통 setup이라는 이름 사용)
```{r setup, include=FALSE}
knitr::opts_chunk$set(
echo = TRUE,
message = FALSE,
warning = FALSE,
fig.width = 7,
fig.height = 5,
fig.align = "center",
dpi = 150
)
# 필요한 패키지 로딩
library(tidyverse)
library(broom)
library(gt)
```
인라인 R 코드
텍스트 안에 R 결과를 직접 삽입합니다. 숫자를 손으로 복사하지 않아도 됩니다.
데이터셋에는 총 `r nrow(mtcars)`개의 관측값이 포함되어 있습니다.
연비의 평균은 `r round(mean(mtcars$mpg), 2)` mpg이며,
표준편차는 `r round(sd(mtcars$mpg), 2)` mpg입니다.
회귀분석 결과, 차체 무게(wt)는 연비에 유의한 영향을 미쳤으며
(β = `r round(coef(model)["wt"], 3)`, p < .001),
무게가 1,000 lbs 증가할 때마다 연비가 평균
`r abs(round(coef(model)["wt"], 2))` mpg 감소하였다.
렌더링하면 이렇게 출력됩니다.
데이터셋에는 총 32개의 관측값이 포함되어 있습니다.
연비의 평균은 20.09 mpg이며, 표준편차는 6.03 mpg입니다.
회귀분석 결과, 차체 무게(wt)는 연비에 유의한 영향을 미쳤으며
(β = -5.344, p < .001), 무게가 1,000 lbs 증가할 때마다
연비가 평균 5.34 mpg 감소하였다.
실제 보고서 예시 구조
---
title: "자동차 연비 예측 회귀분석 보고서"
author: "홍길동"
date: "`r Sys.Date()`"
output:
html_document:
toc: true
toc_float: true
number_sections: true
---
```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = FALSE, message = FALSE, warning = FALSE)
library(tidyverse); library(broom); library(gt)
model <- lm(mpg ~ wt + hp, data = mtcars)
```
## 연구 목적
본 연구는 `r nrow(mtcars)`종의 자동차 데이터를 이용하여
차체 무게와 마력이 연비에 미치는 영향을 회귀분석으로 분석하였다.
## 기술통계
```{r descriptive}
mtcars %>%
select(mpg, wt, hp) %>%
summary()
```
## 분석 결과
### 회귀계수 테이블
```{r regression-table}
tidy(model, conf.int = TRUE) %>%
mutate(across(where(is.numeric), ~round(.x, 3))) %>%
gt() %>%
tab_header(title = "Table 1. Regression Coefficients")
```
### 회귀 진단
```{r diagnostic-plots, fig.width=10, fig.height=8, fig.cap="Figure 1. Model Diagnostics"}
par(mfrow = c(2, 2))
plot(model)
```
## 결론
회귀분석 결과, 무게(`r round(coef(model)["wt"], 2)`)와
마력(`r round(coef(model)["hp"], 3)`)이
연비에 유의한 영향을 미쳤다 (R² = `r round(summary(model)$r.squared, 3)`).
Knit로 문서 생성하기
# RStudio에서: Knit 버튼 클릭 (Ctrl+Shift+K)
# 코드로 직접 실행
library(rmarkdown)
render("report.Rmd") # 기본 출력
render("report.Rmd", output_format = "pdf_document")
render("report.Rmd", output_format = "word_document")
# 파라미터 전달 (파라미터화된 보고서)
render("report.Rmd",
params = list(dataset = "mtcars", group = "cyl"))
파라미터화된 보고서
데이터 그룹별로 동일한 보고서를 자동 생성할 때 유용합니다.
---params: cyl_group: 4---
```{r}
# 파라미터로 필터링
data_filtered <- mtcars[mtcars$cyl == params$cyl_group, ]
cat("실린더 수:", params$cyl_group, "\n")
cat("평균 연비:", round(mean(data_filtered$mpg), 2), "mpg\n")
```r
# 실린더 그룹별로 보고서 자동 생성
for (cyl in c(4, 6, 8)) {
render("report.Rmd",
params = list(cyl_group = cyl),
output_file = paste0("report_cyl", cyl, ".html"))
}
R Markdown은 논문 초안 작성, 과제 보고서, 정기 분석 보고서 등 어디에서나 쓸 수 있습니다. 다음 챕터에서는 R Markdown의 진화 버전인 Quarto를 소개합니다.