본문 바로가기
R/R terminal mode

source()를 이용하여 .R in .R 처리하기

by 거인과난쟁이 2020. 5. 1.

R에서 source() 를 활용하여 여러개의 명령을 한번에 사용하는 경우가 흔하다. 파일이름.R 스크립트를 먼저 만들어야한다.

내 경우는, 연도별, 월별, 일별, 때로는 36개 주기별로 동일한 함수를 반복해서 실행해야 하는 경우가 참 많아서 source()를 매우 효율적으로 사용해야 한다.

대용량 텍스트 데이터를 처리하는 과정에서, 주로 크롤링 과정에서는 여러개의 R 창에서 동시적으로 source()를 실행하여 12시간 가량을 쓰기도 한다. 코어가 많은 cpu가 효율적인 경우가 이 상황이다. 10개 가량의 R을 띄우는 경우도 흔하다.

그런데, 처리 양이 적은 .R을 따로 작성하고, 매번 불러와서 source()를 실행하는 것이 지겨워지는 상황이 왔다. 예를 들어, 1년을 36개의 주기로 만들고, 각각을 .R로 만들어 자료를 처리해야 하는데, 매번 해당 .R을 불러와서 실행시키는 것이 왠지 비효율적이라는 생각이 심하게 드는 상황인 셈이다. 더구나, 2017년, 2018년, 2019년 등으로 몇 년의 36개 .R 파일을 반복해서 실행하는 것은 단순 반복을 감내하는 수준에서 받아들이기 너무 과하다 싶었다.

R은 ()안에 ()를 넣을 수 있다. 그렇다면, .R파일 목록을 source1(source2()) 등으로 연속 처리가 가능하지 않을까.  또, R에는 ()과 ()이 >로 구별되어 처리된다. 실행(enter)버튼으로 ()과 ()이 분리된다. 그렇다면, source2.R과 source3.R, source4.R 등이 ; 또는 enter버튼으로 분리된다면, 연속적으로 source리스트.R 파일을 처리할 수 있지 않을까.

2020.01.1.R, 2020.01.2.R, 2020.01.3.R, 2020.02.1.R, 2020.02.2.R, 2020.02.3.R, ..., 2020.12.3.R 등으로 36개의 목록화된 .R파일들을 만든다. 그리고, 이 파일들을 목록화한 목록.R 파일을 만든다. source("목록.R")을 실행하면, 36개의 파일들이 순차적으로 실행된다. 다음과 같은 파일로 일괄처리를 한다: source("목록.R")

rm(list=ls())
gc()

setwd("/home/shin.jonghwa/문서/IssueCalender/소상공인/y2017/기간별주요어휘/스크립트")
source("y2017.01.1.R")

setwd("/home/shin.jonghwa/문서/IssueCalender/소상공인/y2017/기간별주요어휘/스크립트")
source("y2017.01.2.R")

setwd("/home/shin.jonghwa/문서/IssueCalender/소상공인/y2017/기간별주요어휘/스크립트")
source("y2017.01.3.R")

setwd("/home/shin.jonghwa/문서/IssueCalender/소상공인/y2017/기간별주요어휘/스크립트")
source("y2017.02.1.R")

setwd("/home/shin.jonghwa/문서/IssueCalender/소상공인/y2017/기간별주요어휘/스크립트")
source("y2017.02.2.R")

setwd("/home/shin.jonghwa/문서/IssueCalender/소상공인/y2017/기간별주요어휘/스크립트")
source("y2017.02.3.R")

setwd("/home/shin.jonghwa/문서/IssueCalender/소상공인/y2017/기간별주요어휘/스크립트")
source("y2017.03.1.R")

setwd("/home/shin.jonghwa/문서/IssueCalender/소상공인/y2017/기간별주요어휘/스크립트")
source("y2017.03.2.R")

setwd("/home/shin.jonghwa/문서/IssueCalender/소상공인/y2017/기간별주요어휘/스크립트")
source("y2017.03.3.R")

setwd("/home/shin.jonghwa/문서/IssueCalender/소상공인/y2017/기간별주요어휘/스크립트")
source("y2017.04.1.R")

setwd("/home/shin.jonghwa/문서/IssueCalender/소상공인/y2017/기간별주요어휘/스크립트")
source("y2017.04.2.R")

setwd("/home/shin.jonghwa/문서/IssueCalender/소상공인/y2017/기간별주요어휘/스크립트")
source("y2017.04.3.R")

setwd("/home/shin.jonghwa/문서/IssueCalender/소상공인/y2017/기간별주요어휘/스크립트")
source("y2017.05.1.R")

setwd("/home/shin.jonghwa/문서/IssueCalender/소상공인/y2017/기간별주요어휘/스크립트")
source("y2017.05.2.R")

setwd("/home/shin.jonghwa/문서/IssueCalender/소상공인/y2017/기간별주요어휘/스크립트")
source("y2017.05.3.R")

setwd("/home/shin.jonghwa/문서/IssueCalender/소상공인/y2017/기간별주요어휘/스크립트")
source("y2017.06.1.R")

setwd("/home/shin.jonghwa/문서/IssueCalender/소상공인/y2017/기간별주요어휘/스크립트")
source("y2017.06.2.R")

setwd("/home/shin.jonghwa/문서/IssueCalender/소상공인/y2017/기간별주요어휘/스크립트")
source("y2017.06.3.R")

setwd("/home/shin.jonghwa/문서/IssueCalender/소상공인/y2017/기간별주요어휘/스크립트")
source("y2017.07.1.R")

setwd("/home/shin.jonghwa/문서/IssueCalender/소상공인/y2017/기간별주요어휘/스크립트")
source("y2017.07.2.R")

setwd("/home/shin.jonghwa/문서/IssueCalender/소상공인/y2017/기간별주요어휘/스크립트")
source("y2017.07.3.R")

setwd("/home/shin.jonghwa/문서/IssueCalender/소상공인/y2017/기간별주요어휘/스크립트")
source("y2017.08.1.R")

setwd("/home/shin.jonghwa/문서/IssueCalender/소상공인/y2017/기간별주요어휘/스크립트")
source("y2017.08.2.R")

setwd("/home/shin.jonghwa/문서/IssueCalender/소상공인/y2017/기간별주요어휘/스크립트")
source("y2017.08.3.R")

setwd("/home/shin.jonghwa/문서/IssueCalender/소상공인/y2017/기간별주요어휘/스크립트")
source("y2017.09.1.R")

setwd("/home/shin.jonghwa/문서/IssueCalender/소상공인/y2017/기간별주요어휘/스크립트")
source("y2017.09.2.R")

setwd("/home/shin.jonghwa/문서/IssueCalender/소상공인/y2017/기간별주요어휘/스크립트")
source("y2017.09.3.R")

setwd("/home/shin.jonghwa/문서/IssueCalender/소상공인/y2017/기간별주요어휘/스크립트")
source("y2017.10.1.R")

setwd("/home/shin.jonghwa/문서/IssueCalender/소상공인/y2017/기간별주요어휘/스크립트")
source("y2017.10.2.R")

setwd("/home/shin.jonghwa/문서/IssueCalender/소상공인/y2017/기간별주요어휘/스크립트")
source("y2017.10.3.R")

setwd("/home/shin.jonghwa/문서/IssueCalender/소상공인/y2017/기간별주요어휘/스크립트")
source("y2017.11.1.R")

setwd("/home/shin.jonghwa/문서/IssueCalender/소상공인/y2017/기간별주요어휘/스크립트")
source("y2017.11.2.R")

setwd("/home/shin.jonghwa/문서/IssueCalender/소상공인/y2017/기간별주요어휘/스크립트")
source("y2017.11.3.R")

setwd("/home/shin.jonghwa/문서/IssueCalender/소상공인/y2017/기간별주요어휘/스크립트")
source("y2017.12.1.R")

setwd("/home/shin.jonghwa/문서/IssueCalender/소상공인/y2017/기간별주요어휘/스크립트")
source("y2017.12.2.R")

setwd("/home/shin.jonghwa/문서/IssueCalender/소상공인/y2017/기간별주요어휘/스크립트")
source("y2017.12.3.R")

 

누군가는 질문 할 수 있다. 목록.R 파일을 만드는 것을 자동화할 수 없을까. ^^/

R 밖에서 단순(?) 텍스트 파일의 내용, 제목 등을 바꾸는 명령어를 사용할 수 있다. grep, sed 등에 대한 이야기로 넘어간다.