0Pricing
R Academy · 강의

usethis와 devtools로 패키지 구조 만들기

usethis 도우미로 패키지 디렉터리, DESCRIPTION 및 NAMESPACE를 뼈대부터 구성합니다.

usethis와 devtools로 패키지 구조 만들기은(는) CoddyKit의 무료 R Academy 강의입니다. 이것은 4개 중 1번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 R Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. R Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

R 패키지를 만드는 이유

R 패키지는 재사용 가능한 코드, 데이터, 문서를 공유하는 표준적인 방법입니다. CRAN에 배포하지 않더라도 코드를 패키지로 만들면 문서화된 함수, 단위 테스트, 명확한 네임스페이스 같은 좋은 관행을 지키게 됩니다. devtools와 usethis를 사용하면 이 과정이 간단해집니다.

패키지 뼈대 만들기

usethis::create_package('~/mypackage')는 필요한 모든 파일인 DESCRIPTION, NAMESPACE, R/ 디렉터리가 포함된 디렉터리를 만듭니다. 또한 새 프로젝트를 RStudio에서 자동으로 엽니다.

# library(usethis)
# library(devtools)
#
# usethis::create_package('~/mypackage')
#
# Creates:
# mypackage/
#   DESCRIPTION     <- package metadata
#   NAMESPACE       <- exported symbols (auto-managed by roxygen2)
#   R/              <- your R source files
#   .Rbuildignore   <- files to exclude from package builds

DESCRIPTION 파일

DESCRIPTION 파일은 패키지의 명세 파일입니다. 주요 필드는 다음과 같습니다.

  • Title — 한 줄 설명(각 단어의 첫 글자를 대문자로 쓰며 마침표는 사용하지 않음)
  • Version — 의미 체계적 버전(예: 0.1.0)
  • Author / Authors@R — 패키지 작성자
  • Depends — 필요한 R 버전
  • Imports — 패키지에서 호출하는 packages
  • License — 예: MIT, GPL-3
# DESCRIPTION example:
# Package: mypackage
# Title: Tools for Analyzing Survey Data
# Version: 0.1.0
# Authors@R: person('Alice', 'Smith', email='alice@example.com', role=c('aut','cre'))
# Description: Provides helper functions for cleaning and summarizing survey responses.
# Depends: R (>= 4.1.0)
# Imports: dplyr, stringr
# License: MIT + file LICENSE

use_r()로 함수 추가하기

usethis::use_r('my_function')는 R/my_function.R을 만들고 편집할 수 있도록 엽니다. R/의 각 file에는 하나의 함수 또는 서로 밀접하게 관련된 소수의 함수만 넣어야 합니다. 패키지 file 내부에서는 source() 호출을 사용하지 마십시오.

# usethis::use_r('add')  # creates R/add.R
#
# Write your function in R/add.R:
# add <- function(x, y) {
#   if (!is.numeric(x) || !is.numeric(y)) stop('x and y must be numeric')
#   x + y
# }
#
# Then document it with roxygen2 comments above the function.

devtools::load_all() — 개발 반복 과정

RStudio에서 키보드 단축키 Ctrl+Shift+L로 실행하는 devtools::load_all()은 패키지를 설치하고 불러오는 과정을 시뮬레이션합니다. 실제로 설치하지 않고 R/의 모든 file을 현재 세션에 소싱합니다. 이는 반복적인 개발 주기의 핵심입니다.

# Development loop:
# 1. Edit R/add.R
# 2. devtools::load_all()   # Ctrl+Shift+L
# 3. add(2, 3)              # test interactively
# 4. Go to step 1
#
# load_all() is much faster than install.packages()
# because it skips compilation and installation steps.

devtools::check() — 전체 점검

devtools::check()(Ctrl+Shift+E)는 CRAN에서 사용하는 종합 점검 모음인 R CMD check을 실행합니다. 문서, tests, 예제, 네임스페이스 등을 점검합니다. ERROR 0개, WARNING 0개를 목표로 하고 NOTE도 가능한 한 적게 발생하도록 하십시오.

# devtools::check()  # runs R CMD check
#
# Common errors to fix:
# ERROR:   Undocumented function 'add' => add roxygen2 docs
# WARNING: No NAMESPACE file => run devtools::document()
# NOTE:    No examples => add @examples in roxygen2
# NOTE:    Dependencies in DESCRIPTION not used => clean up Imports

R/ 디렉터리 구조

모든 소스 file은 R/에 넣습니다. 일반적인 규칙은 다음과 같습니다.

  • 함수 family마다 하나의 file을 둡니다(예: R/utils.R, R/plot_helpers.R)
  • 데이터세트 문서화에는 R/data.R을 사용합니다
  • .onLoad() 및 .onAttach() 후크에는 R/zzz.R을 사용합니다

R/ 안에 하위 디렉터리를 만들지 마십시오. 모든 file은 최상위 수준에 있어야 합니다.

# Typical R/ directory for a small package:
# R/
#   add.R          <- add() function + documentation
#   subtract.R     <- subtract() function
#   utils.R        <- internal helpers (not exported)
#   data.R         <- documentation for bundled datasets
#   package.R      <- @docType package documentation

man/ 디렉터리

man/에는 내보낸 각 함수마다 하나씩 .Rd 도움말 file이 들어 있습니다. 이 file을 절대로 직접 편집하지 마십시오. devtools::document()가 roxygen2 주석에서 자동으로 생성합니다. 소스와 함께 이 file도 커밋하십시오.

# man/ is auto-generated:
# man/
#   add.Rd         <- generated from @title, @param etc. in R/add.R
#   subtract.Rd    <- generated from R/subtract.R
#
# Regenerate with:
# devtools::document()  # also updates NAMESPACE
#
# Never edit .Rd files directly -- changes will be overwritten
cat('Always edit roxygen2 comments, never man/*.Rd files directly
')

tests/ 디렉터리

usethis::use_testthat()는 tests/testthat/ 디렉터리를 만들고 DESCRIPTION에 testthat을 추가합니다. 해당 디렉터리 안에 test-*.R이라는 이름의 test file을 작성하십시오. devtools::test()(Ctrl+Shift+T)로 모든 tests를 실행할 수 있습니다.

# Set up testing:
# usethis::use_testthat()
#
# Creates:
# tests/
#   testthat.R            <- runner script (do not edit)
#   testthat/
#     test-add.R          <- your test file
#
# Run tests:
# devtools::test()
# devtools::test_file('tests/testthat/test-add.R')

종속성 올바르게 추가하기

패키지 소스 file 안에서는 library(pkg)를 절대 사용하지 마십시오. 대신 다음과 같이 하십시오.

  • usethis::use_package('dplyr')를 사용하여 DESCRIPTION의 Imports에 패키지를 추가합니다
  • pkg::function()으로 함수를 호출하거나 roxygen2에 @importFrom pkg function을 추가합니다
  • 예제나 tests에서만 필요한 packages에는 Suggests를 사용합니다
# Add a dependency:
# usethis::use_package('stringr')           # adds to Imports
# usethis::use_package('ggplot2', 'Suggests') # adds to Suggests
#
# In R/my_function.R:
# clean_names <- function(x) {
#   stringr::str_to_lower(stringr::str_trim(x))  # use pkg:: prefix
# }

패키지 개발 작업 흐름 요약

R 패키지 개발의 표준적인 반복 주기는 다음과 같습니다.

  1. create_package() — 뼈대를 한 번 만듭니다
  2. use_r('name') — 소스 file을 만듭니다
  3. 함수를 작성하고 문서화합니다(roxygen2)
  4. load_all() — 대화형 테스트를 위해 세션에 불러옵니다
  5. document() — man/과 NAMESPACE를 다시 생성합니다
  6. test() — 단위 tests를 실행합니다
  7. check() — 전체 R CMD check을 실행합니다

빠른 확인: DESCRIPTION 필드

패키지가 직접 호출하는 R packages(하드 종속성)를 나열하는 DESCRIPTION 필드는 무엇입니까?

패키지 구조 복습

R 패키지 개발에 사용하는 주요 file과 명령은 다음과 같습니다.

  • usethis::create_package() — DESCRIPTION, NAMESPACE, R/이 포함된 뼈대를 만듭니다
  • DESCRIPTION — Title, Version, Imports, License 메타데이터
  • usethis::use_r('name') — R/에 소스 file을 추가합니다
  • devtools::load_all() — 빠르게 반복해서 다시 불러옵니다(Ctrl+Shift+L)
  • devtools::document() — roxygen2에서 man/을 다시 생성합니다
  • devtools::check() — ERROR와 WARNING 0개를 목표로 전체 R CMD check을 실행합니다
  • 패키지 소스에 library()를 넣지 말고 pkg::fn()을 사용합니다

자주 묻는 질문

“usethis와 devtools로 패키지 구조 만들기” 강의는 무료인가요?

네 — “usethis와 devtools로 패키지 구조 만들기” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 R Academy 강의 전체를 잠금 해제할 수 있습니다. R Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

“usethis와 devtools로 패키지 구조 만들기”에서 뭘 배우나요?

usethis 도우미로 패키지 디렉터리, DESCRIPTION 및 NAMESPACE를 뼈대부터 구성합니다. 브라우저에서 직접 실행하는 실습 코드로 R Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

R Academy을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 R Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 1번째 강의입니다.

“usethis와 devtools로 패키지 구조 만들기” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 R Academy 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 R Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. usethis와 devtools로 패키지 구조 만들기
  2. roxygen2로 함수 문서화
  3. testthat으로 단위 테스트하기
  4. CRAN 제출과 패키지 유지 관리
← R Academy(으)로 돌아가기