재현 가능한 예제(Reproducible Example, 줄여서 Reprex)를 만드는 법을 배웁니다. 코드가 제대로 작동하지 않을 때 다른 사람에게 도움을 요청하는 가장 효율적인 방법은 상대방이 내 코드를 그대로 복사해서 바로 실행해볼 수 있도록 준비하는 것입니다.
목표
{reprex} 패키지 이해 및 설치
- 최소 재현 가능 예제(Minimal Reproducible Example) 생성 원칙
- 스크린샷 대신 실행 가능한 코드 공유하기
# install.packages("reprex")
library(reprex)
library(tidyverse)
Warning: package 'ggplot2' was built under R version 4.4.3
Warning: package 'tibble' was built under R version 4.4.3
Warning: package 'purrr' was built under R version 4.4.2
Warning: package 'lubridate' was built under R version 4.4.2
── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
✔ dplyr 1.1.4 ✔ readr 2.1.5
✔ forcats 1.0.0 ✔ stringr 1.5.1
✔ ggplot2 3.5.2 ✔ tibble 3.3.0
✔ lubridate 1.9.4 ✔ tidyr 1.3.1
✔ purrr 1.0.4
── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
✖ dplyr::filter() masks stats::filter()
✖ dplyr::lag() masks stats::lag()
ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
1. Reprex란 무엇인가?
reprex는 작은 코드 조각을 실행 결과와 함께 보기 좋게 패키징해주는 도구입니다. 도움을 주는 사람이 코드를 다시 포맷하거나, 누락된 패키지를 추측하거나, 데이터를 찾기 위해 고생할 필요가 없도록 해줍니다.
중요: R 세션의 에러 메시지를 스크린샷으로 찍어 보내지 마세요! 스크린샷 속의 코드는 실행해볼 수 없으므로 도움을 주는 사람이 일일이 코드를 다시 타이핑해야 합니다. 이는 매우 비효율적입니다.
2. 기본 사용법
가장 간단한 예시입니다. 아래 코드를 복사(Ctrl + C)한 다음, 콘솔 창에서 reprex()를 입력하고 실행해 보세요.
잠시 후 RStudio의 Viewer 창에 실행 결과가 포함된 코드 블록이 생성됩니다. 이 내용은 자동으로 클립보드에도 복사되므로, 그대로 이메일이나 Teams 메시지 창에 붙여넣기(Ctrl + V)만 하면 됩니다.
3. 재현 가능한 예제에 포함되어야 할 내용
- 배경 정보: 무엇을 하려고 했는지, 현재 상황은 어떤지에 대한 짧은 설명
- 완전한 설정: 필요한 모든
library() 호출과 데이터 로드 코드 포함
- 최소한의 코드: 에러를 재현하는 데 꼭 필요한 코드만 남기고 나머지는 제거
- 데이터 포함: 상대방이 접근할 수 없는 로컬 파일 대신,
tribble() 등을 이용해 만든 작은 샘플 데이터 사용
팁: tribble()을 이용한 샘플 데이터 생성
도움을 주는 사람이 내 PC의 데이터셋에 접근할 수 없으므로, 코드 내에서 즉석으로 데이터를 만드는 것이 좋습니다.
# SAS의 datalines와 유사한 기능
myData <- tribble(
~Treatment, ~value,
"Placebo", 1,
"Placebo", 2,
"Active", 3,
"Active", 4
)
myData
# A tibble: 4 × 2
Treatment value
<chr> <dbl>
1 Placebo 1
2 Placebo 2
3 Active 3
4 Active 4
이처럼 작고 간결한 데이터를 사용하면 문제를 훨씬 더 명확하게 전달할 수 있습니다.
4. 주의사항
rm(list = ls())로 코드를 시작하지 마세요. 도움을 주는 사람의 현재 작업 환경을 모두 지워버릴 수 있습니다.
setwd("C:/Users/내이름/Documents")와 같은 로컬 경로를 포함하지 마세요. 다른 사람의 컴퓨터에서는 작동하지 않습니다.
- 문제와 관련 없는 패키지나 코드는 과감히 삭제하세요.
챌린지
아래 코드는 에러를 발생시키거나 원하는 결과를 보여주지 않습니다. 다른 사람이 이 문제를 바로 파악하고 해결할 수 있도록, 위에서 배운 원칙에 따라 최소 재현 가능 예제를 만들어 보세요.
library(tidyverse)
library(rio)
adlb <- import("./data/adlbh.xpt")
BICARB <- adlb %>%
filter(SAFFL == "Y") %>%
filter(PARAMCD == "BASO")
ggplot(data = BICARB,
mapping = aes(x = ADY, y = AVAL)) +
geom_point(aes(colour = "THERAPY1"))