R 프로그래밍

R 팩키지 작성

학습 목표

R 팩키지 작성하는 방법 (그리고 이유)에 대한 짧은 요약

왜 본인만의 R 팩키지를 작성해야 할까?

재현가능한 연구!

R 팩키지는 재사용가능한 코드 기본 단위다. 향후 코드를 재사용하고자 하거나 다른 사람이 여러분이 작성한 코드를 사용할 수 있도록 하려면, 팩키지에 코드를 담야야만 된다.

R 팩키지는 구성요소가 두개 필요하다: - 팩키지에 대한 메타데이터를 갖는 DESCRIPTION 파일 - 코드를 갖는 R 디렉토리

다른 선택옵션 구성요소도 있다. 자세한 정보는 여기를 참조한다.

DESCRIPTION 파일

Package: Package name
Title: Brief package description
Description: Longer package description
Version: Version number(major.minor.patch)
Author: Name and email of package creator
Maintainer: Name and email of package maintainer (who to contact with issues)
License: Abbreviation for an open source license

팩키지 명칭은 문자로 시작해야 되고, 문자와 숫자만 포함될 수 있다.

.R 파일

함수가 파일 하나에 모두 있거나, 각 파일별로 쪼개질 필요도 없다. 함수를 어떻게 구조화할지는 본인에게 달려있다. 추천: 논리적 방식으로 구조화해서, 어떤 파일이 어떤 함수를 보관할지 알기 쉽게 한다.

첫번째 R 팩키지 작성

온도 변환 함수를 R 팩키지로 변환하자.

fahr_to_kelvin <- function(temp) {
    #Converts Fahrenheit to Kelvin
    kelvin <- ((temp - 32) * (5/9)) + 273.15
    kelvin
}
kelvin_to_celsius <- function(temp) {
  #Converts Kelvin to Celsius
  Celsius <- temp - 273.15
  Celsius
}
fahr_to_celsius <- function(temp) {
  #Converts Fahrenheit to Celsius using fahr_to_kelvin() and kelvin_to_celsius()
  temp_k <- fahr_to_kelvin(temp)
    result <- kelvin_to_celsius(temp_k)
  result
}

devtoolsroxygen2을 사용하는데, 이유는 상대적으로 간단하게 R 팩키지를 생성하게 한다. 먼저 devtools 팩키지를 설치한다. 그러면, GitHub (코드)에서 roxygen2 팩키지를 설치할 수 있게 된다.

install.packages("devtools")
library("devtools")
install_github("klutometis/roxygen")
library("roxygen2")

작업 디렉토리를 설정하고 나서, create 함수를 사용해서 팩키지 작성을 시작한다. 명칭은 단순하고 유일무이하게 한다.

  • package_to_convert_temperatures_between_kelvin_fahrenheit_and_celsius (나쁨)
  • tempConvert (좋음)
setwd(parentDirectory)
create("tempConvert")

R 디렉토리에 작성한 함수를 추가한다. 각 함수를 개별 R 스크립트에 위치시키고, 다음과 같이 문서를 추가한다:

#' Convert Fahrenheit to Kelvin
#'
#' This function converts input temperatures in Fahrenheit to Kelvin.
#' @param temp The input temperature.
#' @export
#' @examples
#' fahr_to_kelvin(32)

fahr_to_kelvin <- function(temp) {
  #Converts Fahrenheit to Kelvin
  kelvin <- ((temp - 32) * (5/9)) + 273.15
  kelvin
}

roxygen2 팩키지는 주석으로 #' 시작되는 행을 읽어 들이고, 작성하는 팩키지에 대한 문서를 생성한다. 기술되는 태그는 @로 시작된다. 예를 들어, @param은 함수에 입력 매개변수에 관한 정보를 갖고 있다. 이제 roxygen2를 사용해서 작성한 문서를 표준 R 형식으로 변환한다.

setwd("./tempConvert")
document()

이제 팩키지 디렉토리를 살펴보자. /man 디렉토리에 적절하게 서식화된 문서를 갖는 각 .R 파일에 대해 .Rd 파일이 있다.

이제, 팩키지를 적재하고 문서를 살펴보자.

setwd("..")
install("tempConvert")

?fahr_to_kelvin

이제 전역 환경에 대해 부모 환경인 tempConvert 환경이 있음에 주목한다.

search()

이제 작성한 팩키지가 적재돼었기 때문에, 함수 일부를 시도해 보자.

fahr_to_celsius(32)
[1] 0
fahr_to_kelvin(212)
[1] 373.15
kelvin_to_celsius(273.15)
[1] 0

도전과제 - 분포에 대한 팩키지 생성

  • tempConvert 팩키지가 Kelvin 을 Fahrenheit으로 변환하거나 혹은 Celsius에서 Kelvin 혹은 Fahrenheit로 변환하도록 신규 함수를 작성하라.
  • analyze 함수에 대한 팩키지를 작성해서, 더 많은 데이터가 들어오면 적재하기 쉽게 만든다.