상황
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()
함수는 위에 제시한 불편한
문제들을 잘 해결해 준다.
::p_load("package1", "package2", "package3", "package4", "package5") pacman
다수의 패키지를 불러올 때 복수의 문자열 벡터를 입력받을 수 있어 코드 길이를 줄일 수 있다.
불러오길 희망하는 다수의 패키지 중에
설치가 되지 않은 패키지가 있어도 알아서 설치를 진행한 후 설치가 잘 완료되면 불러오는 기능이 한 번에 수행된다.
예를 들어 “package3” 이란 패키지가 설치되어있지 않은 상황이라 하더라도
오류와 함께 코드실행이 멈추는 것이 아니라 CRAN 에 “package3” 을 찾은 후 패키지 설치완료 후 불러온다.
CRAN 에 존재하지 않는 패키지명칭을 적지 않는 한p_load()
함수로 패키지를 로드할 때 오류가 날 일은 거의 없을 것이다.
코드 중간중간 필요한 시점에서
library()
호출을 할 수 도 있겠으나, 프로젝트를 시작하기 앞서 필요한 모든 패키지를 보여주기 위해 보통 서두에 몰아 패키지를 호출하는 경우가 많은것 같다↩︎