정보
-
업무명 : 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
[다음글]
[이전글]
참고 문헌
[논문]
- 없음
[보고서]
- 없음
[URL]
- 없음
문의사항
[기상학/프로그래밍 언어]
- sangho.lee.1990@gmail.com
[해양학/천문학/빅데이터]
- saimang0804@gmail.com
본 블로그는 파트너스 활동을 통해 일정액의 수수료를 제공받을 수 있음
'프로그래밍 언어 > R' 카테고리의 다른 글
[R] R을 이용한 통계 분석 및 데이터 시각화 : eval 함수 (0) | 2020.04.01 |
---|---|
[R] R을 이용한 통계 분석 및 데이터 시각화 : 표준출력 (0) | 2020.04.01 |
[R] R을 이용한 통계 분석 및 데이터 시각화 : R 배치모드 (0) | 2020.04.01 |
[R] R을 이용한 통계 분석 및 데이터 시각화 : Rprofile (0) | 2020.03.29 |
[R] R을 이용한 통계 분석 및 데이터 시각화 : ASCII 문자 (0) | 2020.03.28 |
최근댓글