R4CR

Day3 - R package | 2023-09-01
Jinhwan Kim

Overview

R package

The fundamental unit of shareable, reusable, and reproducible R code.

  • 코드 + 데이터 + 문서 + 테스트

  • 웹을 통해 (주로 github) 다른 사람에게 코드를 공유하고, 다른 사람의 코드를 활용하여 동일한 결과를 얻을 수 있다.

  • 다른 사람에는 미래의 자신도 포함

  • 자주 쓰이는 기능을 정리해서 공유한다

R package 만들기 - Goal

R package 만들기

  • 데이터 패키지 제작

  • 데이터 설명은 용어 참조

  • File -> New Project -> New Directory -> R package using devtools

  • 이름은 nhis

    1. 데이터 저장
    2. 데이터 설명 작성
    3. 함수 작성
    4. 패키지 빌드
    5. 패키지 배포

R package 만들기 - 데이터 저장

  • 패키지에 심고 싶은 데이터를 로드
  • 이후 use_data 사용
    • 이름 중요함
nhisdata <- read.csv(
  '~/Downloads/example_g1e.csv'
)


usethis::use_data(nhisdata)

R package 만들기 - 데이터 저장

  • data 폴더 추가된 것 확인

이후 패키지 빌드를 해야함 (저장)

  • Ctrl + Shift + B (build)

  • 빌드 이후에는 아래 코드처럼 패키지를 통해 데이터를 사용 할 수 있음

nhis::nhisdata
?datasets::iris # 설명 예시
?nhis::nhisdata # 에러가 나는 것이 정상

R package 만들기 - 데이터 설명 작성

R 디렉토리에 R파일을 작성해야 ?nhis::nhisdata 했을때 설명이 나타남

nhisdata.R로 빈 R 파일 생성

R package 만들기 - 데이터 설명 작성

Roxygen: #’로 description을 만들 수 있음.

Roxygen의 권장 구성 요소

  • @title
  • @description
  • @format: 문법이 조금 특이함
  • @source

공식 설명

Example Description

#' @title
#' NHIS dataset
#' @description
#' Dataset from National Health Insurance Service (Korea)
#' @format
#' \describe{
#'  \item{EXMD_BZ_YYYY}{Year}
#' }
#' @source
#' https://www.nhis.or.kr/nhis/index.do
"nhisdata"
  • 이후 Ctrl Shift + D (Document)로 Roxygen 반영
  • 그 다음 패키지 빌드 (저장)

R package 만들기 - 데이터 설명 작성

?nhis::nhisdata
  • 이제 설명을 확인할 수 있음
  • 예시에서는 일부만 작성했으며, 실제 쓰이는 데이터 패키지들마다도 어느만큼 자세히 서술 되어있는지는 다름
  • 정해진 규칙은 없음

R package 만들기 - 함수 작성

  • 테이블 생성 과정을 담고 있는 슬라이드의 주소를 출력하는 함수
nhis::manual()
https://nhiss.nhis.or.kr/bd/ab/bdaba006cv.do

R에 manual.R를 만듬

R package 만들기 - 함수 작성

함수는 데이터와 살짝 다름

  • 역할을 해야하는 함수를 만들고
  • 마찬가지로 Roxygen2로 document 작성.
    • @export 는 필수
  • document 작성 이후 D + B로 패키지 빌드
manual <- function(){
  print('https://nhiss.nhis.or.kr/bd/ab/bdaba006cv.do')
}

R package 만들기 - 패키지 빌드

좋은 “문서화”는 패키지를 더 잘 활용되게 할 수 있음

  • 패키지의 Description을 수정작업

  • Title, Version, Author, Description은 매뉴얼하게 수정
  • License는 usethis::use_mit_license()로 하는게 편리 (먼저 하길 권장)

R package 만들기 - 패키지 빌드

개인 목적으로 github에 올릴거면 안해도 지장은 없지만, 다른 사람이 사용을 기대하거나 CRAN을 목표로 한다면 description을 작성해야 함

  • Title: ?를 쳤을때 나오는 패키지 한줄 요약
  • Version: 패키지 버전
  • Author: 패키지 만든/관리하는 사람
  • Description: 패키지 설명
Package: nhis
Title: Example Dataset of NHIS for clinical research
Version: 0.0.1
Authors@R: 
    person("Jinhwan", "Kim", , "jinhwan@zarathu.com", role = c("aut", "cre"),
           comment = c(ORCID = "YOUR-ORCID-ID"))
Description: Dataset of NHIS
License: MIT + file LICENSEEncoding: UTF-8
Roxygen: list(markdown = TRUE)
RoxygenNote: 7.2.3
Depends: 
    R (>= 2.10)
LazyData: true

R package 만들기

github desktop을 통해서 repo를 만들고 commit 하면 배포 완료

결과

devtools::install_github('jhk0530/nhis')

를 통해 다른 사람도 패키지를 설치하고, nhisdata를 활용할 수 있음

  • Pkgdown / github readme를 꾸미는 것은 다루지 않음

R package 만들기 - 배포

Github 설정 코드

usethis::use_git_config(
  user.name = "jhk0530", # 상관 없음
  user.email = "hwanistic@gmail.com" # github 이메일
)

credentials::credential_helper_set("store") # posit cloud

usethis::create_github_token() ## 토큰 이름만 변경 + 기한 설정 . 이후 발급

credentials::set_github_pat() ## 복붙 & 세션 리스타트

정리

  • R package는 코드 + 데이터 + 문서를 “체계적으로” 공유하기 위한 단위
  • devtools / usethis / roxygen2 등의 R 패키지를 활용하여 패키지를 만들 수 있음
  • data -> usethis::use_data & /data
  • function -> @export & /R
  • Description등의 설명 / 문서화는 하면 할 수록 좋음
  • 마지막으로 github repository를 통해 배포, 활용할 수 있다.