류동균의 R 공부방입니다.
R을 통한 시스템 자동화 기초 본문
외부파라미터를 받아 R파일에서 Rmd 파일을 호출하여 보고서를 저장하는 방식으로 작성해보려한다. 말이 어렵지만 그림으로 이해해보자.
이제 한번 리눅스에서 R파일을 실행하여 외부파라미터를 받아 html파일을 만들어보자. 이 작업에는 R, Rmd 두가지 유형의 파일을 만들어야 한다. 그럼 먼저 R파일부터 살펴보자.
필요한패키지 및 옵션
# R에서 Rmd를 호출하기위한 옵션
Sys.setenv(RSTUDIO_PANDOC="/usr/lib/rstudio-server/bin/pandoc")
# 필요한패키지
library(rmarkdown)
외부 파라미터를 받고 Rdata로 저장
이제 R파일에서 외부에서 parameter를 받을수 있게 args를 설정해주어야한다. 그리고 필요한 parameter를 받고 Rdata로 저장 시켜야한다. 다음과 같이 써보자.
p.s 외부 파라미터를 숫자로 받아 연산을 하고 싶은 경우 as.numeric()함수를 사용해 숫자형으로 바꾸어줘야한다.
# 외부 parameter
args=(commandArgs(TRUE))
# 파라미터를 3개 받음 추가하고싶다면 args[n] 과 같이 추가
para <- c(args[1],args[2],args[3])
# 파라미터를 Rdata파일로 저장
save(para, file = "/home/dgryoo95/interactive/para.RData")
Rendering을 통해 Rmd파일을 html로 변환
render()함수를 통해 Rmd파일을 호출하여 그안에 있는 작업을 하고 html파일로 바꿔준다. 이과정에서 Rmd파일에 외부에서 받은 parameter가 사용된다. 필자는 R파일과 Rmd파일이름을 모두 test_interactive로 설정했다 파일의 이름에 맞게 render() 함수의 filename을 바꾸어 주어야 한다. 경로를 모를경우 getwd()로 경로를 확인할 수 있다.
# html file name
html_link <- paste0(para, collapse = "_")
html_link <- paste0(html_link,".html")
# render( rmd파일 , html제목, html경로 )
# rmd 파일, html경로들은 절대경로를 사용한다
render("/home/dgryoo95/interactive/test_interactive.Rmd",
output_file = html_link,
output_dir = "/home/dgryoo95/interactive")
여기까지 했다면 R파일에서의 작업은 끝이 났다. 이제 Rmd파일으로 넘어가서 간단하게 파라미터를 사용해보자.
Rmd파일 만들기
아주 간단하게 Rmd에서 외부에서 받은 parameter를 사용해보자 파라미터를 사용할때는 물결표시 특수문자를 쓸때 누르는 ` 를 사용한다 다음과 같이 작성해보자.
---
title: "Untitled"
date: "`r Sys.time()`"
output: html_document
---
```{r}
# Rdata에 있는 parameter load
load("/home/dgryoo95/interactive/para.RData")
```
이글은 `r para[2]`월 `r para[3]`일 `r para[1]`에서 작성되었습니다.
Linux에서 Rscript를 외부파라미터를 주어 실행
이제 R, Rmd 파일이 준비가 되었으니 putty로 Linux에 접속해서 다음과 같이 실행해보자
root권한
$ su
R파일이 있는 directory 이동
$ cd home/dgryoo95/interactive
파라미터를 주어 R파일 실행
이과정에서 para[1]에는seoul, [2]에는 10, [3]에는 15가 저장된다
$ Rscript test_interactive.R seoul 10 15
다음과 같이 우리가 지정한 파라미터로 html_link의 name이 나오면서 html파일이 생성되는 것을 확인 할 수 있다. 만들어진 html 파일을 실행해보자. Rmd파일에서 paramter가 제대로 받아져 글이 완성된 것을 확인 할 수 있었다.
이렇게 간단하게 외부에서 parameter를 받아 간단하게 파일을 생성해 보았다. 이 블로그에서는 간단하게 해보았지만 나중에 어떠한 자동화된 파일을 매일 만든다고 가정할때 간단하게 파라미터를 주어 실행하는 것만으로 쉽게 업무를 처리할 수 있을것이라고 생각한다.
'ETC' 카테고리의 다른 글
Linux crontab (0) | 2019.10.24 |
---|---|
네이버 날씨 크롤링, Rmd보고서 작성 (0) | 2019.10.24 |
R 코드로 크롤링을 통한 파일 다운받기 (0) | 2019.10.14 |
프로젝트 관리 툴 트렐로(Trello) (0) | 2019.10.14 |
업무 협업 툴 슬랙(Slack) (0) | 2019.10.14 |