데이터 과학

.R 스크립트를 인자와 함께 실행

학습 목표

  • 명령라인 인터페이스에서 R 스크립트를 실행한다.
  • 다양한 R 스크립트 실행방법을 실습한다.

1. R 스크립트 실행환경 1

R 스크핍트 실행

유닉스/리눅스 운영체제가 준비되었다면 R스크립트 실행환경을 준비한다.

1.1. R설치

R을 스크립트 형태(.R) 파일로 실행할 경우 가장 먼저 r-base-core를 설치한다. 그래픽 사용자 인터페이스가 없는 형태의 R이 설치되며 R 스크립트 실행에 필요한 연관된 프로그램도 더불어 설치한다.

$ sudo apt-get install -y r-base-core

1.2. R 스크립트 실행환경

R과 스크립트를 실행할 Rscript 실행프로그램이 위치한 디렉토리를 확인한다. 여기에 사용되는 명령어는 which다. which R 명령어를 통해 R 실행파일이 /usr/bin/ 디렉토리에 위치한 것을 확인할 수 있다.

$ which R
/usr/bin/R

which Rscript 명령어를 통해 Rcript 실행파일도 /usr/bin/ 디렉토리에 위치한 것을 확인할 수 있다.

$ which Rscript
/usr/bin/Rscript

echo $PATH 명령어를 통해 /usr/bin, 경우에 따라서는 /usr/local/bin 디렉토리에 R과 Rscript 실행파일이 존재하는 것을 확인한다.

$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games

1.3. R 스크립트파일 실행

.R 스크립트 파일을 명령라인 인터페이스로 실행하는 방법은 다양한다. 먼저 hello_world.R 스크립트 파일을 생성한다.

#! /usr/bin/env Rscript

print("Hello World!!!")

쉬뱅(shebang, #!) 다음에 스크립트를 실행할 프로그램을 지정한다. Rscript로 지정하여 R스크립트를 실행하는데 사용한다.

#! /usr/bin/env Rscript

$ chmod +x hello_world.R
$ ./hello_world.R

chmod +x 명령어를 통해서 일반 텍스트 파일을 실행가능한 파일 형식으로 지정한다. hello_world.R 파일이 실행가능한 형태가 되었기 때문에 ./hello_world.R 명령어로 R스크립트를 실행시킨다.

Hello World!!!

1.4. 기타 R 스크립트파일 실행 방법

R스크립트를 실행하는 방법은 다양하다.

$ R --slave -f hello_world.R
$ Rscript hello_world.R

Rscript 명령어로 실행을 시켜도 동일한 산출 결과가 출력된다.

$ R CMD BATCH hello_world.R hello_world_output.txt

R CMD BATCH 명령어로 실행시키면 실행결과가 hello_world_output.txt 파일에 저장된다. hello_world_output.txt 파일명을 지정하지 않으면 hello_world.Rout 파일에 저장된다.

$ R --no-save << RSCRIPT
     print("Hello World")
  RSCRIPT

R --no-save << 사용법도 가능하다.

2. 실습 예제 2

2.1. R스크립트 작성

Rscript r_session_info.R 명령어를 실행해서 실제로 RStudio나 R 콘솔을 열지 않고도 R 세션정보를 명령라인 인터페이스에서 처리하는 R 스크립트를 작성한다.

텍스트 편집기를 열고, sessionInfo()를 적고 파일명을 r_session_info.R로 저장한다.

sessionInfo()

배쉬쉘에서 R스크립트를 실행해서 R 세션정보를 받아확인한다.

$ Rscript r_session_info.R
R version 3.0.2 (2013-09-25)
Platform: x86_64-pc-linux-gnu (64-bit)

locale:
 [1] LC_CTYPE=en_US.UTF-8       LC_NUMERIC=C
 [3] LC_TIME=en_US.UTF-8        LC_COLLATE=en_US.UTF-8
 [5] LC_MONETARY=en_US.UTF-8    LC_MESSAGES=en_US.UTF-8
 [7] LC_PAPER=en_US.UTF-8       LC_NAME=C
 [9] LC_ADDRESS=C               LC_TELEPHONE=C
[11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C

attached base packages:
[1] stats     graphics  grDevices utils     datasets  base

2.2. R스크립트 출력결과 파일로 저장

> 파이프 연산자를 사용해서 R 스크립트 출력결과를 텍스트 파일로 저장한다.

$ Rscript r_session_info.R > r_session_info_pipe_output.txt

또다른 방법은 R 스크립트 내부에서 출력결과를 파일에 저장하고 프로그램을 종료하는 방법도 있다.

caputre.output 함수를 cat과 함께 사용하는데, 한글도 적용이 가능하도록, encoding="UTF-8"도 추가한다.

output <- capture.output(sessionInfo())
cat("R 세션정보", output, file="./r_session_info_rscript.txt", sep="\n", encoding="UTF-8")

Rscript r_session_info.R 명령어를 실행시키면 다음과 같이 실행결과가 텍스트 파일 r_session_info_rscript.txt로 떨어진다.

R 세션정보
R version 3.0.2 (2013-09-25)
Platform: x86_64-pc-linux-gnu (64-bit)

locale:
 [1] LC_CTYPE=en_US.UTF-8       LC_NUMERIC=C
 [3] LC_TIME=en_US.UTF-8        LC_COLLATE=en_US.UTF-8
 [5] LC_MONETARY=en_US.UTF-8    LC_MESSAGES=en_US.UTF-8
 [7] LC_PAPER=en_US.UTF-8       LC_NAME=C
 [9] LC_ADDRESS=C               LC_TELEPHONE=C
[11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C

attached base packages:
[1] stats     graphics  grDevices utils     datasets  base
UTF-8