knitr R 코드 청크의 옵션을 활용하는 방법을 익힙니다.
앞서 만들었던 첫 R 마크다운 문서를 분해하면 다음과 같습니다.
이 튜토리얼은 R 마크다운 문서의 분해 중에서의 knitr의 R 코드 청크 옵션을 이해할 목적으로 진행합니다. 대표적인 청크 옵션을 이해하고, 다루지 않는 다른 옵션의 사용을 시도할 수 있는 자신감 함양을 유도합니다.
우리는 지금 R 코드 청크를 다루고 있습니다. 그런데 knitr은 bash sehll(리눅스 쉘 스크립트), python(파이썬) 코드 청크 외에 몇개의 코드 청크를 지원합니다.
예를 들어 R 마크다운에서 리눅스 쉘 스크립트 청크를 사용하려면 다음과 같이 기술합니다. 이것은 리눅스에서 날짜를 조회하는 명령어인 date
를 수행한 후 그 결과를 마크다운 문서에 삽입합니다.
```{bash}
# 날짜와 일시 출력
date
# 'YYYY-MM-DD' 포맷의 날짜 출력
date +'%Y-%m-%d'
```
# 날짜와 일시 출력
date
# 'YYYY-MM-DD' 포맷의 날짜 출력
date +'%Y-%m-%d'
## Sat Nov 13 10:54:30 KST 2021
## 2021-11-13
브레이스({) 뒤에 오는 ’bash’는 bash 쉘이 코드 청크를 실행하라는 의미입니다. 그러면, R에게 실행을 요청하기 위한 청크는 다음과 같이 사용합니다. 당연히 브레이스 뒤에 ’r’이 따라옵니다.
```{r 청크이름, 옵션이름=옵션값, 옵션이름=옵션값, ...} R 코드 삽입 영역 ```
knitr 홈페이지의 https://yihui.org/knitr/options/ 페이지에는 청크 옵션에 대해서 잘 설명되어 있습니다.
다음은 대표적인 청크 옵션의 목록입니다. 이 옵션들은 반드시 숙지하시기 바랍니다.
튜토리얼에서 익혀야 할 출력 관련 대표적인 청크 옵션입니다.
옵션 | 기본값 | 기능 |
---|---|---|
eval | TRUE | 청크를 실행하고, 그 결과를 삽입하는 여부 설정 |
echo | TRUE | 실행한 명령어도 함께 출력하는지의 여부 설정 |
warning | TRUE | 경고 메시지의 출력 여부 설정 |
error | FALSE | 에러 메시지의 출력 여부 설정 |
message | TRUE | 경고, 에러 외의 메시지의 출력 여부 설정 |
tidy | FALSE | R 코드를 깔끔하게 정돈해서 출력할지의 여부 설정 |
comment | “##” | 실행 결과 출력 각 라인의 앞에 넣을 prefix |
튜토리얼에서 익혀야 할 시각화 관련 대표적인 청크 옵션입니다.
옵션 | 기본값 | 기능 |
---|---|---|
fig.width | 7 | 출력을 위해 생성할 이미지 파일의 너비, 단위: 인치. |
fig.height | 7 | 출력을 위해 생성할 이미지 파일의 높이, 단위: 인치. |
fig.align | “default” | 플롯의 정렬 방법. "left" , "right" , "center" 에서 선택 |
fig.path | ‘figure/’ | 시각화 이미지 파일을 저장할 디렉토리 경로 |
fig.cap | NULL | 플롯의 캡션 문자 정의 |
out.width | 시각화가 화면에 출력되는 너비, 예) “75%”, “300px” |
- 다음 지문을 수행할, 분석 경험을 위해 코드와 결과를 공유할 청크를 만들려고 합니다.
- iris 데이터에서 중복인 데이터가 1건 있습니다. 추출하여 출력해 보세요.
- R 코드와 결과를 함께 출력해 보세요.
- 청크 이름은 ’dup_iris’로 정의합니다.
- ’understand_chunk.Rmd’의 1-1. 빈 영역을 채우고 실행해 봅니다.
- 모범 답안을 보지 않고 만들어 보세요.
여러 방법이 있는데, 다음 코드를 사용해 보세요.
iris[duplicated(iris), ]
```{r dup_iris}
iris[duplicated(iris), ]
```
iris[duplicated(iris), ]
## Sepal.Length Sepal.Width Petal.Length Petal.Width Species
## 143 5.8 2.7 5.1 1.9 virginica
- 다음 지문을 수행할, 분석 결과만 공유할 청크를 만들려고 합니다.
- summary() 함수로 iris 데이터의 각 변수들을 요약해 보세요.
- 결과만 출력해 보세요.
- 청크 이름은 ’dup_iris_result’로 정의합니다.
- ’understand_chunk.Rmd’의 1-2. 빈 영역을 채우고 실행해 봅니다.
- 모범 답안을 보지 않고 만들어 보세요.
다음 코드를 사용해 보세요.
summary(iris)
```{r dup_iris_result, echo=FALSE}
summary(iris)
```
## Sepal.Length Sepal.Width Petal.Length Petal.Width
## Min. :4.300 Min. :2.000 Min. :1.000 Min. :0.100
## 1st Qu.:5.100 1st Qu.:2.800 1st Qu.:1.600 1st Qu.:0.300
## Median :5.800 Median :3.000 Median :4.350 Median :1.300
## Mean :5.843 Mean :3.057 Mean :3.758 Mean :1.199
## 3rd Qu.:6.400 3rd Qu.:3.300 3rd Qu.:5.100 3rd Qu.:1.800
## Max. :7.900 Max. :4.400 Max. :6.900 Max. :2.500
## Species
## setosa :50
## versicolor:50
## virginica :50
##
##
##
- 소스만 설명하려 합니다. 즉, 소스를 실행하지 않고, 출력만 해야 합니다.
- summary() 함수로 iris 데이터의 각 변수들을 요약하는 소스를 출력하세요.
- 청크 이름은 ’iris_not_run’으로 정의합니다.
- ’understand_chunk.Rmd’의 1-3. 빈 영역을 채우고 실행해 봅니다.
- 모범 답안을 보지 않고 만들어 보세요.
다음 코드를 사용해 보세요.
summary(iris)
```{r iris_not_run, echo=TRUE, eval=FALSE}
summary(iris)
```
summary(iris)
- 다음을 수행해 보세요.
- -2부터 2까지의 정수 5개의 로그 값을 계산해 보세요.
- 청크 이름은 ’log_integer’로 정의합니다.
- ’understand_chunk.Rmd’의 1-4. 빈 영역을 채우고 실행해 봅니다.
- 모범 답안을 보지 않고 만들어 보세요.
- 어떤 결과가 출력되었나요?
- 음수일 경우에 발생하는 경고 메시가 출력됨을 확인하세요.
다음 코드를 사용해 보세요.
log(-3:3)
```{r log_integer}
log(-3:3)
```
log(-3:3)
## Warning in log(-3:3): NaNs produced
## [1] NaN NaN NaN -Inf 0.0000000 0.6931472
## [7] 1.0986123
- 다음을 수행할 때 경고 메시지가 출력되는 것을 이미 알고 있습니다.
- -2부터 2까지의 정수 5개의 로그 값을 계산해 보세요.
- 경고 메시지를 출력하고 싶지 않습니다.
- 청크 이름은 ’no_warning’로 정의합니다.
- ’understand_chunk.Rmd’의 1-5. 빈 영역을 채우고 실행해 봅니다.
- 모범 답안을 보지 않고 만들어 보세요.
다음 코드를 사용해 보세요.
log(-3:3)
```{r no_warning, warning=FALSE}
log(-3:3)
```
log(-3:3)
## [1] NaN NaN NaN -Inf 0.0000000 0.6931472
## [7] 1.0986123
- 앞의 튜토리얼 결과를 보면, 출련된 각 라인에 “##”가 앞에 출력되었습니다.
- lm(Sepal.Width ~ Sepal.Length, data = iris)를 실행하세요.
- “##”가 보기 싫습니다. 차라리 출력되지 않았으면 좋겠습니다.
- 청크 이름은 ’change_comment’로 정의합니다.
- ’understand_chunk.Rmd’의 1-6. 빈 영역을 채우고 실행해 봅니다.
- 모범 답안을 보지 않고 만들어 보세요.
comment 옵션을 사용합니다.
```{r change_comment, comment=""}
lm(Sepal.Width ~ Sepal.Length, data = iris)
```
lm(Sepal.Width ~ Sepal.Length, data = iris)
Call:
lm(formula = Sepal.Width ~ Sepal.Length, data = iris)
Coefficients:
(Intercept) Sepal.Length
3.41895 -0.06188
- 다음 지문을 수행할, 분석 경험을 위해 코드와 결과를 공유할 청크를 만들려고 합니다.
- iris 데이터에서 Sepal.Width ~ Sepal.Length 관계를 산점도로 시각화 하세요.
- Species별로 도형의 모양과 색상을 달리 그리세요.
- loess 산점도 위에 추세선도 출력하세요..
- R 코드와 결과를 함께 출력해 보세요.
- 청크 이름은 ’scatter’로 정의합니다.
- ’understand_chunk.Rmd’의 2-1. 빈 영역을 채우고 실행해 봅니다.
- 모범 답안을 보지 않고 만들어 보세요.
여러 방법이 있는데, 다음 코드를 사용해 보세요.
library(ggplot2)
ggplot(data = iris, aes(x = Sepal.Length, y = Sepal.Width,
color = Species, shape = Species)) +
geom_point() +
geom_smooth()
```{r scatter}
library(ggplot2)
ggplot(data = iris, aes(x = Sepal.Length, y = Sepal.Width,
color = Species, shape = Species)) +
geom_point() +
geom_smooth()
```
## Warning: replacing previous import 'lifecycle::last_warnings' by
## 'rlang::last_warnings' when loading 'tibble'
## Warning: replacing previous import 'lifecycle::last_warnings' by
## 'rlang::last_warnings' when loading 'pillar'
ggplot(data = iris, aes(x = Sepal.Length, y = Sepal.Width,
color = Species, shape = Species)) +
geom_point() +
geom_smooth()
## `geom_smooth()` using method = 'loess' and formula 'y ~ x'
- 2.1. 결과에서 R 소스와 메시지의 출력 없이 플롯만 출력하려 합니다.
- 청크 이름은 ’plot_only’로 정의합니다.
- ’understand_chunk.Rmd’의 2-2. 빈 영역을 채우고 실행해 봅니다.
- 모범 답안을 보지 않고 만들어 보세요.
여러 방법이 있는데, 다음 코드를 사용해 보세요.
ggplot(data = iris, aes(x = Sepal.Length, y = Sepal.Width,
color = Species, shape = Species)) +
geom_point() +
geom_smooth()
```{r plot_only, echo=FALSE, message=FALSE}
ggplot(data = iris, aes(x = Sepal.Length, y = Sepal.Width,
color = Species, shape = Species)) +
geom_point() +
geom_smooth()
```
- 2.2. 결과에서 플롯을 화면의 가운데 정렬로 출력하려 합니다.
- 청크 이름은 ’plot_center’로 정의합니다.
- ’understand_chunk.Rmd’의 2-3. 빈 영역을 채우고 실행해 봅니다.
- 모범 답안을 보지 않고 만들어 보세요.
fig.align 인수를 사용합니다.
```{r plot_center, echo=FALSE, message=FALSE, fig.align="center"}
ggplot(data = iris, aes(x = Sepal.Length, y = Sepal.Width,
color = Species, shape = Species)) +
geom_point() +
geom_smooth()
```
- 2.3. 결과에서 플롯을 화면의 영역의 1/2 사이즈로 출력하려 합니다.
- 청크 이름은 ’plot_half_width’로 정의합니다.
- ’understand_chunk.Rmd’의 2-4. 빈 영역을 채우고 실행해 봅니다.
- 모범 답안을 보지 않고 만들어 보세요.
out.width 인수를 사용합니다.
```{r plot_half_width, echo=FALSE, message=FALSE, fig.align="center", out.width="50%"}
ggplot(data = iris, aes(x = Sepal.Length, y = Sepal.Width,
color = Species, shape = Species)) +
geom_point() +
geom_smooth()
```
- 2.3. 결과에 캡션을 출력하려 합니다.
- “iris 품종별 산점도”라는 캡션을 추가합니다.
- 청크 이름은 ’plot_caption’으로 정의합니다.
- ’understand_chunk.Rmd’의 2-5. 빈 영역을 채우고 실행해 봅니다.
- 모범 답안을 보지 않고 만들어 보세요.
fig.cap 인수를 사용합니다.
```{r plot_caption, echo=FALSE, message=FALSE, fig.align="center", fig.cap="iris 품종별 산점도"}
ggplot(data = iris, aes(x = Sepal.Length, y = Sepal.Width,
color = Species, shape = Species)) +
geom_point() +
geom_smooth()
```