R) 패키지-설치와 로딩을 한번에!

R) 패키지-설치와 로딩을 한번에!

패키지 설치는 install.packages() 로드는 library() 이것을 하나의 함수로 해결할 수 있을까?

최근 Shiny 대시보드와 업무 자동화 모듈 개발 요청이 많아 새로운 환경에 패키지를 설치하는 것 부터 시작하는 일이 잦았는데 다행이도 몇 년 전에 작성한 코드를 발굴하여 본 포스팅을 통해 패키지 관련 팁을 공유한다.

기존 방식

만약에 설치되어있지 않은 패키지를 강제로 불러오려고 했을 경우 다음과 같은 메세지를 볼 수 있다.

1
library("abc")

library("abc")에서 다음과 같은 에러가 발생했습니다:‘abc’이라고 불리는 패키지가 없습니다

그렇다면 abc 패키지 설치를 위해 다음과 같이 코드를 작성하고 다시 불러와야 한다.

1
2
install.packages("abc")
library("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
2
3
4
if(!require("R.utils")){
install.packages("R.utils")
}
R.utils::use("abc")
Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×