본문으로 바로가기



Make your own R package! - 3. DESCRIPTION 파일 설정

category R Programming/Rpackage 2017.07.05 09:29
Make your own R package! - 3. DESCRIPTION 파일 설정

이번 포스팅에서 사용될 R 패키지는 다음과 같다.

library(devtools)

저번 포스팅을 통해서 필자는 r4issactoast 패키지의 기본 구조에 대하여 알아보았다.

r4issactoast 패키지 구조

이번 시간에는 DESCRIPTION파일 설정을 해보도록 하겠다.

DESCRIPTION 파일 설정

먼저 파일을 열어서 내용을 살펴보면, 현재의 DESCRIPTION 파일에는 다음과 같이 설정이 되어있는 것을 알 수 있다.

Package: r4issactoast
Type: Package
Title: What the Package Does (Title Case)
Version: 0.1.0
Author: Who wrote it
Maintainer: The package maintainer <yourself@somewhere.net>
Description: More about what it does (maybe more than one line)
    Use four spaces when indenting paragraphs within the Description.
License: What license is it under?
Encoding: UTF-8
LazyData: true

DESCRIPTION 파일에 들어갈 필수 항목은 ‘Package’, ‘Version’, ‘License’, ‘Description’, ‘Title’, ‘Author’, ‘Maintainer’ 항목이다.

  • Package: 자신의 패키지 이름을 입력한다.
  • Title: 자신의 패키지를 설명할 수 있는 짧은 문장을 넣는다. Title Case라고 써져있는 부분은 단어의 처음 부분을 대문자로 쓰는 형식을 의미하는데, R에서는 toTitleCase 함수를 제공하므로 이를 사용해 결과값을 제목으로 사용하도록 하자.
tools::toTitleCase("favorite R functions for <www.issactoast.com>")
## [1] "Favorite R Functions for <www.issactoast.com>"
  • Version: 패키지 버전은 . 혹은 -를 사용하여 입력한다. 필자는 0.1.0을 그대로 입력하였다.

  • Date: 부가적인 항목이지만 나중에 패키지를 citation할 때 중요하다. 패키지를 만든 날짜를 써 두도록 하자. 필자는 ‘Date: 2017-07-05’ 항목을 추가했다.

  • AuthorMaintainer:

어떤 패키지에 따라서는 패키지를 작성한 사람과 그것을 유지하는 사람이 바뀔 수 있다. 따라서 두 요소는 패키지 정보에 필수적으로 들어가야 한다. 이 두 가지 항목을, 아래와 같이 Author@R항목을 이용하면 한번에 쓸 수 있다.

Authors@R: person("Issac", "Lee", email = "issactoast@gmail.com", 
                  role = c("aut", "cre"))

패키지의 저자가 많은 경우 등등 Author@R을 이용하는 것이 여러모로 편하므로, 두 항목을 지우고, 위와 같이 입력한다. 위의 코드에서 aut는 author를 의미하고, cre는 creater 혹은 maintainer를 나타낸다. @R 태그가 붙은 이유는 이 부분이 실행 가능한 R 함수라는 것을 나타내 주기 위함이다. 실제로 person부분을 실행시켜볼 수도 있다.

person("Issac", "Lee", email = "issactoast@gmail.com", role = c("aut", "cre"))
## [1] "Issac Lee <issactoast@gmail.com> [aut, cre]"
  • License:

패키지를 MIT 라이선스로 만들기로 하였다면, use_mit_license() 함수를 이용하면, 자동으로 DESCRIPTION 파일 내용을 바꿔준다.

use_mit_license(copyright_holder = "Issac Lee")

위의 결과로 DESCRIPTION 파일의 license항목이 MIT + file LICENSE로 바뀌고, LICENSE라는 이름의 파일이 폴더에 생성된 것을 확인 할 수 있다.

  • LazyData: true

어떤 패키지의 경우, 패키지에 딸려있는 데이터가 존재하는 경우가 있다. 만약 그 데이터가 상당히 많은 용량을 차지하고 있을 경우, 만약 패키지를 불러올 때마다 매번 데이터도 같이 불러온다면 memory 문제에 직면하게 될 것이다. 따라서 패키지를 불러오더라도, 실질적으로 데이터를 조회하지 않는다면 데이터를 로딩을 하지 않는 것이 좋다. LazyData 항목을 true로 설정해주면 사용자가 패키지를 불러오더라도 패키지의 딸려있는 데이터는 명시적으로 불러오지 않는 한 메모리 상에 올려지지 않는다. 말 그대로 Lazy하게 행동하게 된다.

DESCRIPTION 파일 내용

작업이 끝난 필자의 DESCRIPTION 파일은 다음과 같다.

Package: r4issactoast
Type: Package
Version: 0.1.0
Date: 2017-07-05
Title: Favorite R Functions for <www.issactoast.com>
Authors@R: c(person("Issac", "Lee", role = c("aut", "cre"),
                     email = "issactoast@gmail.com"))
Description: This package has many functions which are used
    in <www.issactoast.com> blog statistics posts. All the explations
    and applications of functions can be found in the website given in the title.
License: MIT + file LICENSE
Encoding: UTF-8
LazyData: true

이제 우리가 만든 패키지의 메타데이터를 다 채웠다. 이것을 확인하기 위하여 다음의 citation() 함수를 이용하여 패키지 레퍼런스를 확인해보자.

load_all()
citation("r4issactoast")
## 
## To cite package 'r4issactoast' in publications use:
## 
##   Issac Lee (2017). r4issactoast: Favorite R Functions for
##   <www.issactoast.com>. R package version 0.1.0.
## 
## A BibTeX entry for LaTeX users is
## 
##   @Manual{,
##     title = {r4issactoast: Favorite R Functions for <www.issactoast.com>},
##     author = {Issac Lee},
##     year = {2017},
##     note = {R package version 0.1.0},
##   }

citation() 함수가 잘 작동함을 확인 할 수 있다!

License에 대하여

License의 경우는 다음의 대표적인 두 가지, MIT와 GPL-2,만 일단 알고 가자. 라이선스에 대한 좀 더 자세한 설명은 오픈소스SW라이선스 종합정보시스템 홈페이지를 참고 하도록 하자. 다음의 설명 역시도 이 홈페이지를 참고 하였다.

-MIT: MIT 라이선스(MIT License)는 미국 매사추세츠 공과대학교(MIT)에서 해당 대학의 소프트웨어 공학도들을 돕기 위해 개발한 라이선스다. MIT 라이선스를 따르는 소프트웨어를 개조한 제품을 반드시 오픈 소스로 배포해야 한다는 규정이 없으며 GNU 일반 공중 라이선스의 엄격함을 피하려는 사용자들에게 인기가 있다.

사실 필자가 이해하는 MIT 라이선스의 골자는 다음과 같다. 이 라이선스의 특징은 자유롭게 이용하되, 배포할 때 라이선스를 같이 배포해야 한다(우리의 경우는 파일)는 조건이 있다.

-GPL-2: 자유 소프트웨어 재단(OSF)에서 만든 자유 소프트웨어 라이선스다. 미국의 리처드 스톨만(Richard Stallman)이 GNU-프로젝트로 배포된 프로그램의 라이선스로 사용하기 위해 작성했다.

  1. 프로그램을 어떤 목적으로든지 사용할 수 있다.
  2. 프로그램의 복사를 언제나 프로그램의 코드와 함께 판매 또는 무료로 배포할 수 있다.
  3. 프로그램의 코드를 용도에 따라 결정할 수 있다.
  4. 변경된 프로그램 역시 프로그램의 코드와 함께 자유로이 배포할 수 있다.

대부분의 소프트웨어에 대한 라이선스는 소프트웨어를 공유하거나 수정할 수 있는 자유를 금지하기 위해 고안되었다. 반면에 GNU 일반 공중 라이선스는 자유 소프트웨어를 공유하고 수정할 수 있는 자유를 보장하기 위해 의도되었다. 즉, 소프트웨어가 사용자 모두에게 자유롭게 이용될 수 있도록 하는 것이다.

필자가 이해하는 GPL-2 라이선스의 골자는 다음과 같다. 나의 코드를 마음대로 가져다가 써도되고, 판매해도 된다. 하지만 이 라이선스의 코드를 가져다 쓴다면 그의 부산물 역시 GPL로 공개 해야만 한다.

이 외 많은 라이선스들에 대한 정보는 인터넷을 찾아보면 될 것이다. 다음 포스팅에서는 R폴더에 우리의 함수를 직접 넣어보도록 하자.

참고 문헌

[1] Wickham, Hadley. R packages: organize, test, document, and share your code. " O’Reilly Media, Inc.“, 2015.

[2] Jennifer (Jenny) Bryan, Write your own R package STAT 545

[3] 오픈소스SW라이선스 종합정보시스템 (https://olis.or.kr/license/introduction.do)

[4] Writing R extension 페이지 (https://cran.r-project.org/doc/manuals/r-release/R-exts.html#The-DESCRIPTION-file)


SHARE TO



티스토리 툴바