더북(TheBook)

프로그램이 운영체제의 명령을 호출하는 대표적인 예로는 파일 입출력이 있다. ‘4.2 파일 입출력’ 절에서 살펴본 파일 입출력 명령을 사용해 큰 파일을 저장 및 로드해보고 이때 걸리는 시간을 측정해보자.

> x <- matrix(1:(10000*10000), ncol=10000)
> system.time(save(x, file="x.RData"))
   user system elapsed
  75.49   0.56   76.05
> system.time(load(file="x.RData"))
   user system elapsed
   2.81   0.20    3.01

위 결과를 보면 1부터 N까지의 숫자를 합하는 함수의 경우와 달리 system time이 크게 나타난 것을 볼 수 있다. 이는 파일 입출력을 위해 R 환경이 운영체제의 기능을 많이 호출해 사용하기 때문에 발생한 현상이다.

system time은 코드를 수행하는 머신의 메모리가 부족해 운영체제가 디스크의 일부를 메모리로 사용하는 페이징Paging이 빈번히 발생할 경우에도 증가할 수 있다. 따라서 system time이 크다면 메모리가 혹시 부족하지는 않은지 운영체제의 작업 관리자를 통해 잘 살펴봐야 한다.

이처럼 코드의 수행 시간을 측정할 수 있으면 다양한 구현 방법 중 어떤 방법이 더 나은 성능을 보이는지 평가할 수 있다. 한 가지 예로 ‘5.5.6 리스트를 데이터 프레임으로 변환하기’ 절에서는 rbind( )보다 rbindlist( )가 성능이 더 나음을 system.time( ) 함수를 사용해 보인 바 있다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.