R packages

Author

SEOYEON CHOI

Published

August 21, 2025

패키지 생성

R package를 위한 폴더 생성

usethis::create_package("todaysexample")
  • todaysexample 여기에 만들고 싶은 패키지 이름 작성

문서 작업을 위해 경로 설정

setwd("todaysexample")

문서 작업(description 등 수정된 부분이 있으면 적용되는 구간)

devtools::document()
  • automatically generate Rd files in man/ and update the NAMESPACE file.

버전 관리?

description

Package: todaysexample
Title: What the Package Does (One Line, Title Case)
Version: 0.0.0.9000
Authors@R: 
    person("First", "Last", , "first.last@example.com", role = c("aut", "cre"))
Description: What the package does (one paragraph).
License: `use_mit_license()`, `use_gpl3_license()` or friends to pick a
    license
Encoding: UTF-8
Roxygen: list(markdown = TRUE)
RoxygenNote: 7.3.2

패키지 버전 vs 수정 버전

major, minor에 따라 버전 수정

  • git 관리가 편한 이유 수정할때마다 업로드 해서 관리가 편해짐

  • git commit -m ‘수정한 내용이나 이름’ 이런식으로 커밋 하면 깃 자체에서 관리하면 되니까 편해짐.

  • MAJOR.MINOR.PATCH

    • MAJOR: 호환성 깨뜨리는 변경 (backward incompatible changes)
    • MINOR: 새로운 기능 추가 (호환성 유지)
    • PATCH: 버그 수정, 작은 개선 (호환성 유지)
  • 예:

    • 1.0.0 → 첫 정식 릴리스
    • 1.1.0 → 새로운 함수 추가
    • 1.1.1 → 작은 버그 수정

패키지 폴더 안 R 폴더에 함수 작성

#' Say hello
#'
#' @param name A name
#' @export
hello <- function(name) {
  paste("Hello", name)
}

#' Filter with dplyr
#'
#' @param data A dataframe
#' @return Filtered dataframe
#' @importFrom dplyr filter
#' @export
my_filter <- function(data) {
  dplyr::filter(data, TRUE)
}
  • export 함수 내용 공개
  • importFrom 필요한 패키지 내에서 함수 하나만 가져오기(가볍게 만들기 위함)

git 배포하는 법

  1. git hub에 repository만들기
  2. r studio에서 tools>version control>projectsetup>version control system -> git 선택
  3. local과 git 연결
git remote add origin https://github.com/username/todaysexample.git
git branch -M main
git push -u origin main
  1. r package 준비
  • .Rbuildignore : README.Rmd, pkgdown 설정 등 빌드에 필요 없는 파일 제외
usethis::use_build_ignore("README.Rmd")
  • 라이선스:
usethis::use_mit_license("Your Name")
  • README.Rmd + 배지:
usethis::use_readme_rmd()
  • GitHub에 푸시
git add .
git commit -m "올리고 싶은 내용 작성 ->내용 나중에 가능"
git push origin main
  • 설치 방법 공유
# devtools 필요
install.packages("devtools")

# GitHub에서 설치
devtools::install_github("username/todaysexample")

# 패키지 로드
library(todaysexample)
  • 문서 사이트 배포

  • pkgdown으로 웹사이트 생성:

usethis::use_pkgdown()
pkgdown::build_site()


GitHub Pages로 자동 배포:

usethis::use_github_action("pkgdown")

오픈 소스 말고 폐쇄형으로(회사 등) R 패키지를 관리할 때

GitHub.com 같은 외부 서비스에 올리면 안 됨 (기밀 코드 유출 위험)

  • 사내 Git 서버 (GitLab CE, Gitea 등) → 내부망에서만 접근
  • 공유폴더에 bare repo 만들어 원격 저장소로 활용
  • 로컬 Git만 사용 → 개인 PC에서만 관리
  • 배포는 내부 CRAN 레포(miniCRAN, Posit Package Manager) 로만 → 팀원들이 안전하게 설치

Git server 종류

  1. Gitea / Forgejo
  • 특징: 아주 가볍고 단순한 Git 서버
  • 장점
    • 설치가 쉽고 빠름 (하루 만에도 운영 가능)
    • 서버 자원(CPU, 메모리) 거의 안 씀 → 소규모 팀에 적합
    • 기본 기능: 저장소 관리, 코드 리뷰, 이슈 관리, 간단한 CI 연동
  • 단점
    • 고급 기능(예: 대규모 CI/CD, 복잡한 권한 체계)은 제한적
  • 비유: 경차 — 연비 좋고 관리 쉬움, 소규모 팀에 딱
  1. GitLab CE (Community Edition)
  • 특징: 엔터프라이즈급, 기능이 매우 풍부한 Git 서버
  • 장점
    • CI/CD 파이프라인 내장 (테스트·배포 자동화 가능)
    • 세밀한 권한 관리 (역할, 그룹, 프로젝트 단위 권한)
    • 대규모 팀 협업 지원 (수백~수천 명)
    • Wiki, 이슈 트래킹, 보안 스캐닝 등 통합 플랫폼 느낌
  • 단점
    • 설치·운영 복잡 (관리자 필요)
    • 서버 자원 많이 필요 (CPU/메모리 2배 이상)
  • 비유: 대형 SUV — 힘 세고 기능 많음, 대신 유지비가 듦

Git vs GitHub

  • Git = 버전 관리 도구 (무료, 로컬/내부망에서 사용 가능)
  • GitHub = Git 저장소를 인터넷에 공개/호스팅해주는 서비스
  • 회사 기밀이라면 GitHub.com에는 절대 올리지 않음
  • Git 자체는 업로드 없이도 로컬에서만 사용 가능

push의 개념

  • push = 로컬 저장소의 변경 이력 → 원격 저장소에 반영
  • Git전체 파일을 매번 저장하는 게 아니라, 바뀐 부분(diff)만 기록
  • 기록은 .git/ 폴더 안에 모두 들어있음

기록/파일 확인 방법

git log
  • 변경된 부분 확인
git diff HEAD~1 HEAD
  • 과거 버전 파일 확인
git checkout <commit-id> -- file.R
  • 전체 되돌리기
git reset --hard <commit-id>