본문으로 바로가기



Make your own R package! - 1. 패키지 초기설정 및 github 연결하기

category R Programming/Rpackage 2017.07.03 02:38
Make your own R package! - 1. 준비작업

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

library(devtools)

필자의 경우 현재 블로그에 R programming과 통계에 대한 포스팅을 하는 중인데, 각 포스팅에서 정의했던 함수들을 다시 다른 포스팅에서 사용하려면 정의했던 함수들을 일일히 복사하여 붙여넣기를 해야한다. 이 과정은 상당히 귀찮아서, 필자로 하여금 연재를 하는데 하나의 걸림돌이 되었다. 따라서 귀차니즘으로 인하여, 포스팅에서 정의한 함수가 유용하다고 판단 될 경우(나중에 필요하다고 생각하는 함수들) 나만의 패키지를 만들어서 넣어놓으면, 독자의 경우나 필자의 경우나 따라하기가 훨씬 쉬워질 것이라 생각했다. 또한 현재 필자가 사용하는 방법은 git shell을 사용하지 않고 Rstudio를 사용해서 모든작업을 할 수 있는 방법이기 때문에(사실 편법이다.) 패키지를 처음만드는 초보자에게 적합하다고 생각한다.

필요한 패키지 설치

시작하기에 앞서 이 포스팅에 가장 핵심적인 패키지인 devtools를 설치하도록 하자. R패키지를 만드는 방법은 크게 두 가지인데 R을 사용하는 방법과 Rstudio를 이용하여 만드는 방법이 있는데, 이 패키지는 rstudio를 통하여 패키지를 만드는 과정을 훨씬 편리하게 만들어 준다.

install.packages("devtools")
library(devtools)

패키지 이름 정하기

필자가 만들 패키지의 이름은 홈페이지 제목을 본 딴 r4issactoast라고 지었다. 해들리 교수는 R packages 책에서 패키지의 이름에 대문자를 되도록이면 없애라고 권고한다. (다른 사용자의 입장에서 R4issactoast인지, R4Issactoast인지, R4IssacToast인지 외우는게 머리아프다는 게 주된 이유이다.ㅎㅎ)

패키지와 github 연결하기

이번 포스팅의 목표는 깃허브와 연동된 R패키지 프로젝트를 생성하는 것이다.

Step1. R package 프로젝트 생성

  1. File > New Project > R package 에서 자신의 패키지 이름과 패키지 작업이 이루어질 경로를 설정 한 후, create project 클릭하자.

Fig1. create git repository 체크 해제하고 진행한다.

  1. 위의 과정을 마치면 hello.R의 내용이 열리면서 다음과 같은 구조의 폴더로 이동하게 된다. hello() 함수는 우리의 패키지에 들어가게 될 테스트 함수로서 코드는 아래와 같은 프린트 함수이다. 이 포스팅의 마지막에 우리가 세팅한 패키지가 잘 작동한다면, 위의 함수를 실행시켰을 경우 잘 작동할 것이다.
hello <- function() {
  print("Hello, world!")
}
Fig2. 가장 기본적인 패키지의 구조

Fig2. 가장 기본적인 패키지의 구조

앞에서 git repository를 연결하지 않음을 설정하였으므로, Environment, History, Build 탭에 Git 탭이 보이지 않는다. Github와 Rstudio를 연결하게되면 Git 폴더가 생성된다. 우리의 목표는 팩키지 빌드를 위한 Build 탭과 버전 관리를 위한 Git 탭을 동시에 활성화 시키는 것이다.

Step2. 깃허브 repository 생성

깃허브 홈페이지에 가서 자신의 account에 패키지 이름과 똑같은 이름의 repository를 생성한다. 깃허브의 초기화면에서 create new repository를 누르면 아래의 화면과 같이 생성정보 입력화면이 나오게 된다.

Fig3. README과 함께 initialization 란을 체크 후 생성하자.

Fig3. README과 함께 initialization 란을 체크 후 생성하자.

위의 과정을 마치면 다음과 같이 깃허브에 repository가 생성이 되어있을 것이다. 이것으로 깃허브의 repository도 생성을 마쳤다.

Step3. R패키지 폴더 이름 바꾸기

이 부분이 필자가 사용하는 방법의 가장 편법인데, 생성시킨 패키지 폴더인 r4issactoast폴더의 이름을 바꿔준다. 이유는 Rstudio가 깃허브 repository 연동기능을 빈 폴더에 연동시키는 방법밖에 지원하지않기 때문이다. 따라서 Step1에서 생성한 팩키지 폴더 r4issactoast의 이름을 r4issactoast_pack으로 바꿔주었다.

Step4. 깃허브와 Rstudio 연동하기

  1. Step2에서 만들었던 깃허브의 패키지 repository로 이동하여 녹색의 clone and download버튼을 클릭하여 나오는 주소를 복사한다. 오른쪽에 보이는 복사버튼을 누르면 복사가 된다. (만약 자신이 SSH를 연동하지 않았다면 HTTPS의 주소가 나올텐데 당황하지말고 그냥 나오는 주소를 복사하면 된다. 하지만 SSH키는 연동해놓는 것이 편하므로 나중에라도 연동을 해놓는 것을 추천한다. 다음 링크)의 1~5를 따라 하자.)
Fig4. 자신의 패키지 repository의 녹색버튼을 클릭한다. 화면은 중요부분만 잘라서 캡쳐했다.

Fig4. 자신의 패키지 repository의 녹색버튼을 클릭한다. 화면은 중요부분만 잘라서 캡쳐했다.

  1. File > New Project > Version Control > Git을 누르면 아래와 같은 화면이 보이는데, 첫번째란 위에서 복사한 주소를 붙여넣는다.
Fig5. git repository 정보 입력란

Fig5. git repository 정보 입력란

정보를 입력한 후 Create Project 버튼을 누르면, 자신이 설정한 repository(패키지 이름과 동일한)의 이름의 폴더가 생성되면서 프로젝트 파일이 활성화 된다. 그리고 아래의 구조와 같은 세개의 파일이 폴더에 들어있을 것이다.

Fig6. Rstudio와 github를 연결한 후의 상태는 위와 같다.

Fig6. Rstudio와 github를 연결한 후의 상태는 위와 같다.

이번에는 Build탭 대신에 Git탭이 생겨난 것을 확인 할 수있다. 이제 우리는 두 개의 폴더를 만든 셈인데, 필자의 경우는 r4issactoastr4issactoast_pack 두 개의 폴더가 존재하는 셈이다.

Fig7. 필자의 폴더의 경우는 위의 두 폴더가 생성되어 있다.

Fig7. 필자의 폴더의 경우는 위의 두 폴더가 생성되어 있다.

Step5. 폴더 합치기와 proj.R 파일 조정

마지막 단계는 r4issactoast_pack 폴더 안의 모든 파일을 r4issactoast 폴더로 잘라내어 붙여넣기 한다. 두 폴더는 r4issactoast.Proj을 가지고 있어서 파일을 교체할것인지 물을 것이다. 꼭 파일을 덮어쓴다고 설정해야 한다. r4issactoast.Proj를 덮어쓰지 않을 경우 Build탭이 나타나지 않으므로 유의한다. 복사를 완료한 후 _pack이 붙어있는 빈 폴더는 삭제해도 좋다.

패키지 연동 조절하기

이제 r4issactoast.Proj를 열게 되면 자동으로 프로젝트 모드로 들어가게 되면서 아래와 같이 빌드 탭과 깃 탭이 동시에 활성화 되어있는 것을 볼 수 있다.

Fig8. 빌드와 깃이 동시에 활성화 되었다.

Fig8. 빌드와 깃이 동시에 활성화 되었다.

자, 마지막 설정만이 남았다. 폴더의 파일 목록을 확인해보면 .gitignore.Rbuildignore가 보일 것이다. 이 파일의 내용을 수정해줘야 한다. .gitignore의 경우는 버전 컨트롤을 할 것인지, 즉 깃허브와 연동을 하지 않을 파일 목록을 써주면 된다. 비슷하게 .Rbuildignore의 경우는 팩키지를 빌드할 경우 무시할 파일명을 관리하는 파일이다.

  1. .gitignore의 내용을 다음과 같이 설정한다.
.Rproj.user
.Rhistory
.RData
.Ruserdata
r4issactoast.Rproj
.gitignore

즉, 마지막 두 줄을 추가하는데 프로젝트 파일과 .gitignore 자기 자신을 넣어준다. 저장을 하면 Fig9과 같이 git탭에 보이는 commit 리스트에 두 개의 파일이 사라지는 것을 알 수 있다.

  1. .Rbuildignore의 내용을 다음과 같이 설정한다.
^.*\.Rproj$         # Automatically added by RStudio,
^\.Rproj\.user$
    
# Github stuffs
.gitignore
README.md
.Rhistory
Fig9. gitignore파일의 내용이 깃 탭에 반영된 것을 확인 할 수 있다.

Fig9. gitignore파일의 내용이 깃 탭에 반영된 것을 확인 할 수 있다.

이제 깃허브로 첫 커밋을 해보자. 커밋 버튼을 누른 후 파일들을 모두 체크하고 myfirst commit이라는 내용으로 커밋을 완료한 후 push 버튼을 누른다.

Fig10. Commit 버튼을 누르고 Push버튼을 누른다.

Fig10. Commit 버튼을 누르고 Push버튼을 누른다.

만약 모든것이 잘 되었다면 아래의 화면이 보일 것이다.

Fig11. Commit 버튼을 누르고 Push버튼을 누른다.

Fig11. Commit 버튼을 누르고 Push버튼을 누른다.

이제 우리들의 첫 R패키지가 준비가 되었다. 아래의 코드를 자신의 패키지 이름에 맞게 수정한 뒤 설치하자. 그리고 패키지를 불러와 함수가 잘 작동하는지 확인해보자!

devtools::install_github("issactoast/r4issactoast")
## Downloading GitHub repo issactoast/r4issactoast@master
## from URL https://api.github.com/repos/issactoast/r4issactoast/zipball/master
## Installing r4issactoast
## '/usr/lib64/R/bin/R' --no-site-file --no-environ --no-save --no-restore  \
##   --quiet CMD INSTALL  \
##   '/tmp/RtmpuE78G4/devtools3e0f4f9349c4/issactoast-r4issactoast-0600d44'  \
##   --library='/home/issactoast/R/x86_64-suse-linux-gnu-library/3.4'  \
##   --install-tests
## 
## Reloading installed r4issactoast
library(r4issactoast)
hello()
## [1] "Hello, world!"

다음 포스팅부터는 각 폴더의 역할과 파일의 설정에 대하여 하나씩 정복해 나가보도록 하자.


SHARE TO



티스토리 툴바