정보

    • 업무명     : R을 이용한 통계 분석 및 데이터 시각화 : 디버깅

    • 작성자     : 박진만

    • 작성일     : 2020-03-24

    • 설   명      :

    • 수정이력 :

     

     내용

    [개요]

    • R은 통계 분석 및 시각화 등의 기능을 갖춘 프로그래밍 언어 내지 통계 분석 환경입니다. 

    • 통계 분석 기능으로 통계 검정, 선형 회귀 분석, 시계열 데이터 분석, 클러스터링 등을 지원하고 있습니다.

    • 또한 최신 논문에서 발표된 같은 새로운 기술도 R로 구현되는 경우가 많습니다.

    • 특히 시각화 기능으로 히스토그램, 막대 그래프, 선 그래프, 산포도, 나무 모양 그림이나 히트맵 등 기본적인 그래프가 기본으로 지원하고 있습니다.

    • 또한 ggplot2 등의 패키지를 사용하여 더 높은 수준의 그림을 가시화할 수 있습니다.

     

     

    [특징]

    • 데이터를 이해하기 위해서 통계 분석 및 데이터 시각화가 요구되며 이 프로그램은 이러한 목적을 달성하기 위한 소프트웨어

       

    [기능]

    • 데이터형 소개

     

    [활용 자료]

    • 없음

     

    [자료 처리 방안 및 활용 분석 기법]

    • 없음

     

    [사용법]

    • 소스 코드 예시 참조

     

    [사용 OS]

    • Windows 10

     

    [사용 언어]

    • R v3.6.2

    • R Studio v1.2.5033

     

     소스 코드

    [디버깅]

    • R 실행 중 발생한 오류의 원인을 조사하고 싶은 경우는 browser, debug, trace, traceback 등의 디버깅 함수를 이용한다.

    browser browser가 쓰는 줄에서 프로그램의 실행이 일시 정지된다. 해당 행까지 출현 한 변수의 내용을 확인 할 수 있다.
    debug 함수 이름을주고, 그 함수의 처리를 추적한다.
    traceback 직전에 발생한 함수의 오류를 추적하여 오류가 발생한 원인을 표시한다.
    trace 함수에 임의의 위치에 브레이크 포인트를 삽입하고 디버깅 할 수있다.

     

    [browser]

    • 코드에서 browser함수에 들어가는 것으로, 이것이 실행 된 때 browser를 쓰는 줄에서 코드의 실행이 일시 정지된다.

    • 이때 변수의 내용을 확인하거나 다양한 테스트 연산을 수행 할 수있다.

    func <- function(x) {
      x <- x + 2
      y <- x * x
      z <- NULL
      browser()          # 해당 부분에서 일시 정지
      a <- x + y
      b <- x - y 
      c <- a + b
      return(c)
    }

     

    • func함수를 실행하면 browser 행에서 실행이 일시 정지된다. 일시 정지 된 상태에서 n입력하여 행 후 진행할 수있다.

    func(10)
    #'
    #' Called from: func(10)
    #'
    #'Browse[1]> ls()          # 현재 사용할 수있는 변수
    #'[1] "x" "y" "z"
    #'
    #'Browse[1]> x             # x를 확인
    #'[1] 12
    #'
    #'Browse[1]> x + y         # 중간 상태에서 계산
    #'[1] 156
    #'
    #'Browse[1]> n             # 다음 행을 확인 (실행되지 않음)
    #'debug at #6: a <- x + y
    #'
    #'Browse[2]> a             # 아직 실행되지 않으므로 a에는 아무것도 들어 있지 않음
    #'Error: object 'a' not found
    #'
    #'Browse[2]> n             # 다음 행을 확인 (6 번째 줄은 실행되고, 7 번째 줄은 실행 대기 상태)
    #'debug at #7: b <- x - y
    #'
    #'Browse[2]> a             # 6 번째 줄이 실행 되었기 때문에, a 에 값이 할당됨
    #'[1] 156
    #'
    #'Browse[2]> Q             # 디버깅 종료
    #'

     

    • browser함수를 2 개 이상 입력한 경우 일시 정지 상태에서 c를 입력하면 현재 browser의 행에서 다음 browser의 행 까지 건너 뛸 수있다.

    • 또한 조건부 browser을 설정할 수도있다. 예를 들어, 변수 y가 10 이상인 경우에 한하여 일시 중지하려면 아래와 같이한다.

    func <- function(x) {
      x <- x + 2
      y <- x * x
      z <- NULL
      browser(expr = y >= 10)          # browser에 조건 걸기
      a <- x + y
      b <- x - y 
      c <- a + b
      return(c)
    }
    

     

    [debug]

    • 함수 디버깅을 할 경우에 debug함수를 이용한다. 

    • debug를 이용하여 디버깅을 원하는 함수 이름을 인자로 준다. 

    • 또한 디버깅 상태에있는 함수를 해제하려면 undebug함수를 이용하면 된다.

    func <- function(x) {
      x <- x + 2
      y <- x * x
      z <- NULL
      a <- x + y
      b <- x - y 
      c <- a + b
      return(c)
    }

     

    • debug함수에 함수 이름을 할당하고 디버깅 모드에 진입한다.

    • 다음 함수를 실행하여 디버깅이 시작된다.

    debug(func)               # debug에 func를 넣음으로서 디버깅을 시작
    
    func(10)
    #'debug at #1: {
    #'    x <- x + 2
    #'    y <- x * x
    #'    z <- NULL
    #'    a <- x + y
    #'    b <- x - y
    #'    c <- a + b
    #'    return(c)
    #'}
    #'Browse[2]> ls()         #  첫 번째 행이 실행하기 전에 상태 변수는 x 밖에 없는것을 확인
    #'[1] "x"
    #'
    #'Browse[2]> x            # x의 내용을 확인
    #'[1] 10
    #'
    #'Browse[2]> n            # 1 행 진행 
    #'debug at #2: x <- x + 2
    #'
    #'Browse[2]> Q            # 디버깅을 종료
    
    undebug(func)             # 디버깅 상태를 해제

     

    [traceback]

    • R을 실행하는 동안 오류가 발생했을 때, traceback함수가 오류의 근원을 추적 할 수있다. (아래는 예시)

    plot(NA, 1)
    ## Error in plot.window(...) : need finite 'xlim' values
    ## In addition: Warning messages:
    ## 1: In min(x) : no non-missing arguments to min; returning Inf
    ## 2: In max(x) : no non-missing arguments to max; returning -Inf
    
    
    traceback()
    ## 4: plot.window(...)
    ## 3: localWindow(xlim, ylim, log, asp, ...)
    ## 2: plot.default(NA, 1)
    ## 1: plot(NA, 1)

     

    • 오류의 근원은 plot.window함수임을 알았으므로, 더욱 자세하게 조사하려면 debug함수를 사용하여 plot.window함수를 한 줄씩 디버깅 해 나갈 수 있다.

    debug(plot.window)
    
    plot(NA, 1)
    #'debugging in: plot.window(...)
    #'debug: .Internal(plot.window(xlim, ylim, log, asp, ...))
    #'Browse[2]>

     

    [trace]

    • trace함수를 이용하여 디버깅을 하고자하는 함수의 임의의 위치에 break를 걸 수있다. 

    • 아래의 예시는 func함수의 세 번째 줄에 중단 점 ( browser함수)를 삽입하는 예시이다.

    func <- function(x) {
      x <- x + 1         
      y <- x + 1         
      z <- y + 1         
      w <- z + 1         
    }
    
    
    # fun 함수의 세 번째 줄에 디버그 함수 (browser)를 걸고자 함
    # browser를 func의 3 행과 4 행 사이에 삽입한다. 
    trace(func, tracer=browser, at=3)
    
    # func 함수를 호출
    func(0)
    #' Tracing fun(0) step 3 
    #' Called from: eval(expr, envir, enclos)
    #' Browse[1]> x                    
    #' [1] 1
    #' Browse[1]> y                    
    #' Error: object 'y' not found
    #' Browse[1]> n                   
    #' debug: y <- x + 1
    #' Browse[2]> y
    #' Error: object 'y' not found
    #' Browse[2]> n                    
    #' debug at #4: z <- y + 1
    #' Browse[2]> y                    
    #' [1] 2
    #' Browse[2]> z                   
    #' Error: object 'z' not found
    #' Browse[2]> Q                   

     

    [다음글]

     

    [R] R을 이용한 통계 분석 및 데이터 시각화 : 표준출력

    정보 업무명 : R을 이용한 통계 분석 및 데이터 시각화 : 표준출력 작성자 : 박진만 작성일 : 2020-03-31 설 명 : 수정이력 : 내용 [개요] R은 통계 분석 및 시각화 등의 기능을 갖춘 프로그래밍 언어 내지 통계..

    shlee1990.tistory.com

     

    [이전글]

     

    [R] R을 이용한 통계 분석 및 데이터 시각화 : R 배치모드

    정보 업무명 : R을 이용한 통계 분석 및 데이터 시각화 : R 배치모드 작성자 : 박진만 작성일 : 2020-03-31 설 명 : 수정이력 : 내용 [개요] R은 통계 분석 및 시각화 등의 기능을 갖춘 프로그래밍 언어 내지 통계..

    shlee1990.tistory.com

     

     

     참고 문헌

    [논문]

    • 없음

    [보고서]

    • 없음

    [URL]

    • 없음

     

     문의사항

    [기상학/프로그래밍 언어]

    • sangho.lee.1990@gmail.com

    [해양학/천문학/빅데이터]

    • saimang0804@gmail.com

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

    본 블로그는 파트너스 활동을 통해 일정액의 수수료를 제공받을 수 있음
    • 네이버 블러그 공유하기
    • 네이버 밴드에 공유하기
    • 페이스북 공유하기
    • 카카오스토리 공유하기