패키지 설치는 install.packages()
로드는 library()
이것을 하나의 함수로 해결할 수 있을까?
최근 Shiny 대시보드와 업무 자동화 모듈 개발 요청이 많아 새로운 환경에 패키지를 설치하는 것 부터 시작하는 일이 잦았는데 다행이도 몇 년 전에 작성한 코드를 발굴하여 본 포스팅을 통해 패키지 관련 팁을 공유한다.
기존 방식
만약에 설치되어있지 않은 패키지를 강제로 불러오려고 했을 경우 다음과 같은 메세지를 볼 수 있다.
1 | library("abc") |
library("abc")에서 다음과 같은 에러가 발생했습니다:‘abc’이라고 불리는 패키지가 없습니다
그렇다면 abc 패키지 설치를 위해 다음과 같이 코드를 작성하고 다시 불러와야 한다.
1 | install.packages("abc") |
혼자서 사용하는 환경이라면 관계없으나 업무 자동화 등 특정 목적을 위해서 작성된 코드는 복사되어 다양한 새로운 환경에서 사용될 수 있다. 이 때문에 별도로 install.packages()
함수를 사용하는 것은 여간 번거로운 것이 아니다. 그리고 별도로 install.packages()
함수가 잔뜩 적힌 스크립트 파일을 준비하는 것도 관리하는 것도 여간 귀찮은 일이 아니다. 이제 그 대안을 알아보자.
R.utils 활용
R.utils 패키지는 유용한 기능이 많지만 여기서 소개할 기능은 바로 use()
함수이다. 다음의 코드를 실행해보자.
1 | library("R.utils") |
필요한 패키지를 로딩중입니다: R.oo
필요한 패키지를 로딩중입니다: R.methodsS3
R.methodsS3 v1.8.1 (2020-08-26 16:20:06 UTC) successfully loaded. See ?R.methodsS3 for help.
R.oo v1.24.0 (2020-08-26 16:11:58 UTC) successfully loaded. See ?R.oo for help.
다음의 패키지를 부착합니다: ‘R.oo’
The following object is masked from ‘package:R.methodsS3’:
throw
The following objects are masked from ‘package:methods’:
getClasses, getMethods
The following objects are masked from ‘package:base’:
attach, detach, load, save
R.utils v2.10.1 (2020-08-26 22:50:31 UTC) successfully loaded. See ?R.utils for help.
다음의 패키지를 부착합니다: ‘R.utils’
The following object is masked from ‘package:utils’:
timestamp
The following objects are masked from ‘package:base’:
cat, commandArgs, getOption, inherits, isOpen, nullfile, parse, warnings
경고메시지(들):
패키지 ‘R.utils’는 R 버전 4.1.1에서 작성되었습니다
1 | use("abc") |
경고메시지(들):
1: 패키지 ‘abc’는 R 버전 4.1.1에서 작성되었습니다
2: 패키지 ‘locfit’는 R 버전 4.1.1에서 작성되었습니다
만약 기존에 abc 패키지를 설치했었다면 설치되지 않은 다른 패키지명으로 바꿔서 실행해본다. 추가로 R.utils 패키지 설치 및 로드가 제대로 되지 않는다면 R.oo 패키지와 R.methodS3 패키지가 제대로 설치되었는지 다시 확인해보자.
R.utils 패키지가 설치된 시점에서 완전히 한줄의 코드로 특정 패키지의 설치와 로딩을 한 번에 하려면 다음의 코드를 참고하자.
1 | R.utils::use("abc") |
상기 사항과 더불어 최초에 R.utils 패키지가 없는 경우 해당 패키지 까지 설치하고 특정 패키지의 설치 및 로드를 수행하려고 할 때는 다음과 같이 코드를 작성할 수 있다.
1 | if(!require("R.utils")){ |