Lovetoken

저는 개발 취향을 가진 데이터 분석가 Jr. 입니다.

Navigation
 » Home
 » About Me
 » Github

R에서 다수의 패키지 편하게 불러오기

12 Jan 2017 » R



상황

R 에서 여러 개의 패키지를 사용해야 하는 프로그램을 작성해야 한다면 library() 함수로 사용하는 패키지를 불러오는 코드를 서두에 작성하는 전략을 사용할 것이다. 1

library("package1")
library("package2")
library("package3")
library("package4")
library("package5")

위의 코드는 5개의 패키지를 로드하는 코드로 볼 수 있는데, 만약 필요로 하는 패키지의 수가 5개가 아닌 수십 개가 된다면 수십개의 library() 함수를 작성하게 될 것이다.
아쉽게도 library() 함수는 불러올 대상이 되는 패키지를 복수개로 입력할 수 없어

library(c("package1", "package2", "package3", "package4", "package5"))
Error : 
  'package'는 반드시 길이가 1이어야 합니다

와 같은 꼴로는 사용할 수 없기 때문에 코드가 불필요하게 길어진다.
반복문을 이용해 굳이 해결책을 찾자면 벡터형 문자열을 이용할 수 있을 것인데

for(i in c("package1", "package2", "package3", "package4", "package5")){
  library(i, character.only = T)
} 

중간에 패키지 로드가 실패했을 경우 (예를 들어 “package3” 호출이 실패)
이후의 패키지들 (“package4”, “package5”) 이 로드되지 않는 등 실제로 사용하기엔 불편한 점들이 있을 것이다.

또한, 위에 제시한 어떠한 방법이든
자신이 만든 프로그램이 다수의 패키지에 의존되면 의존될수록 타인이 자신의 프로그램을 이용할 때 오류가 일어날 가능성도 커진다.
타인은 프로그램에 의존된 패키지가 모두 설치되어 있을 리 없다.



pacman 패키지의 p_load() 함수

이처럼 재현 가능한 연구를 방해하는 요소들을 없애기 위해 고민하다가 pacman package 를 알게 되었고
pacman 패키지에서 제공되는 여러 함수 중 p_load() 함수의 도움을 가장 많이 받고 있다.
일반적인 상황에서 p_load() 함수는 위에 제시한 불편한 문제들을 잘 해결해 준다.

pacman::p_load("package1", "package2", "package3", "package4", "package5")
  1. 다수의 패키지를 불러올 때 복수의 문자열 벡터를 입력받을 수 있어 코드 길이를 줄일 수 있다.

  2. 불러오길 희망하는 다수의 패키지 중에
    설치가 되지 않은 패키지가 있어도 알아서 설치를 진행한 후 설치가 잘 완료되면 불러오는 기능이 한 번에 수행된다.
    예를 들어 “package3” 이란 패키지가 설치되어있지 않은 상황이라 하더라도
    오류와 함께 코드실행이 멈추는 것이 아니라 CRAN 에 “package3” 을 찾은 후 패키지 설치완료 후 불러온다.
    CRAN 에 존재하지 않는 패키지명칭을 적지 않는 한 p_load() 함수로 패키지를 로드할 때 오류가 날 일은 거의 없을 것이다.


  1. 코드 중간중간 필요한 시점에서 library() 호출을 할 수 도 있겠으나, 프로젝트를 시작하기 앞서 필요한 모든 패키지를 보여주기 위해 보통 서두에 몰아 패키지를 호출하는 경우가 많은것 같다↩︎