Lovetoken

저는 개발 취향을 가진 데이터 분석가 Jr. 입니다.

Navigation
 » Home
 » About Me
 » Github

R에서 범용적으로 진행표시줄(progress bar)을 구현할 수 있는 progress package

16 Apr 2016 » R



이전에 R에서 진행표시줄(progress bar) 을 만들기 위해 windows OS 에서 작동되는 winProgressBar() 함수에 대해서 설명한 적이 있다.
아쉽게도 윈도우 이외 다른 운영체계에서는 이 함수가 지원되지 않는다.
결국 상호호환의 문제로 다른 방안을 찾아보아야 하는 상황이 일어났는데 어떠한 운영체계 (, , )라 하더라도 R에서 진행표시줄을 나타내기 위한 방법을 찾아 정리해보고자 한다.

지금까지 찾아본 방법중 가장 좋은 것은 progress package 를 이용하는 것 이었다.



example code

이전에 포스팅한 글을 빌려 똑같은 예제를 이용해 보겠다.

임의의 코드를 1000번 반복하는 for문 이며, 반복의 대상이 되는 코드의 내용물 은 상당히 복잡할 것으로 가정한다.
예를 들어 반복의 대상이 되는 코드를 한번 수행하는데 걸리는 시간이 iteration 에 상관없이 공통으로 0.01초 라면 for 문이 모두 돌아가기 까지 소요되는 시간은 10초가 된다.
이러한 가정을 정확하게 구현하는 코드가 바로 아래 같다.

for(i in seq(1000)){
  Sys.sleep(0.01)  
} 



progress package 를 이용해 진행표시줄 만들기

progress package 를 준비하고 로드한다.

# install.packages("progress")
library("progress")

그 다음 위의 예제코드에 몇 가지 코드를 덧붙인다.

pb <- progress_bar$new(total = 1000)

for(i in seq(1000)){
    pb$tick()
    Sys.sleep(0.01)
}

추가된 코드는 2줄이다.

우선 첫번째 progress bar 에 대한 사전정보가 담긴 객체 pb 를 만든다.
사전정보는 iteration 의 최대값을 넣어준다.
즉 우리예시의 반복문은 1000회를 반복하므로 total 인자에 1000을 부여한다.
그렇게 만든 객체 pb 를 반복문 안에 심어주고 이를 째깍째깍 거릴 수 있도록 tick() 모듈을 심어준다.
이것이 가장 기본적인 사용방법이다.

실행해보면 R console 에 다음과 같이 진행표시줄이 나타나고, 점진적으로 진행되는 에니메이션을 볼 수 있다.

추가된 2줄 코드의 문법형태가 Python을 사용하는 것처럼 닮았다.
R6 Object 라고 설명되어 있는데, 때문에 다양한 특별기능을 자유롭게 조절하여 사용 할 수 있는 듯 하다.
그 방법에 대해선 ?progress_bar 를 통해 확인할 수 있으며, 예제코드들을 활용하면 상황에 맞게 커스터마이징도 가능할 듯 싶다.