Stats & AI tech blog - '일단 시도함'
[R] R에서 라이브러리 (패키지) 만들기 본문
오늘은 R에서 내가 만든 함수를 모아 라이브러리(패키지)를 만들어 보려고 한다.
자주 쓰는 함수를 모아 놓고 편하게 쓸 수 있을 것 같다.
라이브러리(패키지)를 만드는 순서는 아래와 같다.
1. 패키지 구조 생성
2. 패키지 메타데이터 생성
3. 함수 파일, 도움말 문서 작성
4. 패키지 빌드 및 설치
1. 패키지 구조 생성
먼저 패키지를 저장할 디렉토리와 그 안에 필요한 메타 데이터를 생성해야한다.
'usethis' 패키지를 사용하면 구조를 자동으로 생성할 수 있다.
install.packages("usethis")
library(usethis)
# 패키지 구조 생성
create_package("path/to/your/package")
위 코드를 실행하면 지정된 경로에 폴더(나는 이름을 zim으로 생성)가 생성되고 안에 DESCRIPTION, NAMESPACE 등 패키지 메타데이터도 함께 생성된 것을 확인할 수 있다.
2. 패키지 메타데이터 작성
위에서 자동으로 생성된 DESCRIPTION파일과 NAMESPACE파일을 열어서 수정해준다.
그냥 내가 필요한 정보를 추가해주면 된다.
3. 함수 파일, 도움말 문서 작성
위에서 create_package를 실행했을 때, R프로젝트 새 창이 떴을 것이다.
새로운 프로젝트 창에서 함수에 대한 스크립트를 작성해주면 된다.
나는 baseline_table을 원하는 형태로 만들어주는 함수를 추가해 줬는데, 내용은 신경쓰지 않아도 된다.
스크립트 상단에 @param, @return, @export 내용으로 함수 설명에 대한 Roxygen2 주석을 추가해준다.
#' A sample function
#'
#' This is a simple example function.
#'
#' @param df A data frame containing the data.
#' @param dependent A string specifying the dependent variable.
#' @param mean_p Logical, whether to include p-values for means.
#' @param median_p Logical, whether to include p-values for medians.
#' @param cat_parm Logical, whether to use chi-square test for categorical variables.
#' @return A data frame containing the baseline table.
#' @export
baseline_table <- function(df, dependent, mean_p = F, median_p = T, cat_parm = F){
col_list <- colnames(df)
explanatory = col_list[col_list != dependent]
dependent = dependent
...
# Result
result <- bind_rows(cat.values, mm) %>%
arrange(index) %>%
mutate(p = ifelse(is.na(p), '', p),
test = ifelse(p == '', '', test)) %>%
select(-index)
return(result)
}
함수와 도움말 주석을 작성했다면, 아래 콘솔창에서 devtools::document()를 실행해준다.
실행 후에 man폴더 안에 .Rd파일이 생성된 것을 확인할 수 있다.
# Roxygen2 문서 생성
document()
4. 패키지 빌드 및 설치
여기까지 패키지를 만들었다면, 이제 패키지를 빌드하고 설치하면 된다.
동일하게 콘솔창에서 아래 코드를 실행해준다.
# 패키지 빌드
build()
# 패키지 설치
install()
위 작업을 모두 수행했다면, library(패키지명)으로 내가 만든 라이브러리(패키지)를 불러와 사용할 수 있다.
라이브러리(패키지)가 저장된 경로는 .libPaths()로 확인 가능하다.
'Programming > R' 카테고리의 다른 글
[R] Loop function for Univariable Logistic Regression (0) | 2024.11.08 |
---|---|
[R] R에서 변수 동적 처리 (0) | 2024.07.12 |
[R] Caret Package로 모델 학습 및 튜닝하기 (0) | 2024.05.29 |
[R] EDA with ggplot2 (0) | 2024.02.27 |
[R] K-Means Clustering (0) | 2024.02.26 |