R 기본 디버깅 (Debugging) 및 RStudio 이용
디버깅 방법은 아래와 같이 크게 2가지로 나눠 진다.
- print(), sprint(), cat()을 사용해서 메시지나 객체의 내용을 출력해보는 방법
- browser()를 사용한 코드 디버깅 방법
print()
print()문으로 중간 중간 데이터를 찍어 보면서 수행 하도록 한다.
paste() 함수와 같이 쓰는면 유용하다.
인자간의 공백을 사용하지 않는 함수는 paste0() 함수 이다.
fibo <- function (n) {
if (n == 1 || n == 2) {
print (" base case ")
return (1)
}
print ( paste0 (" fibo (", n - 1, ") + fibo (", n - 2, ")"))
return ( fibo (n - 1) + fibo (n - 2))
}
> fibo(3)
[1] " fibo (2) + fibo (1)"
[1] " base case "
[1] " base case "
[1] 2
sprintf()
print()와 유사하지만 주어진 인자들을 특정한 규직에 맞게 문자열로 변환해 출력 한다.
sprintf("포멧팅 문자열",인자1,인자2,..인자n)
# %d / %f / %s (C언어의 문법과 유사하다)
cat()
행 바꿈을 수행하지 않고 출력하는 특징이 있다.
줄바꿈 하고 싶으면 "\n"을 수행 하면 된다.
이러한 특징 때문에 cat()을 사용해서 테스트 방식의 프로그레스 상태 메시지를 보여줄 수 있다.
> sum_to_ten <- function () {
+ sum <- 0
+ cat(" Adding ...")
+ for (i in 1:10) {
+ sum <- sum + i
+ cat(i, "...")
+ }
+ cat(" Done !", "\n")
+ return (sum)
+ }
> sum_to_ten()
Adding ...1 ...2 ...3 ...4 ...5 ...6 ...7 ...8 ...9 ...10 ... Done !
[1] 55
Cat을 이용한 또다른 디버깅 코드이다.
#for detecting error, analyze each Corpus
sapply(1:length(vTitle), function(x){
cat(x,'...')
sms_corpus_clean <- tm_map(sms_corpus[x], content_transformer(tolower))
if(x%%10 == 0){
cat('\n')
}
})
browser()
해당 함수가 호출 되면 명령어의 수행이 중지되고, 해당 시점부터 디버깅 모드가 시작된다.
원하는 부분에다가 직접 browser() 코드를 삽입 해야한다.
그럼 해당 코드 위치에 도달 했을때
Browse[1]> 이라는 명련 표시줄로 변경이 된다.
명령어는 gdb와 대부부 같다.
n,s,c
종료는 Q 이다.
browser()만의 장점은 다음과 같다.
- 어떠한 editor에서도 사용하다.
- 추가적으로 conditional breakpoint의 기능을 구현할수도 있다.
for (i in 1:1024) {
start_work()
if (i == 512)
browser()
finish_work()
}
R-Studio를 이용한 디버깅 방법
아래와 같이 편집기에서 마우스로 클릭하면 breakpoint를 설정 할 수 있다.
해당 라인에서 Shift + F9를 해도 된다.
breakpoint를 설정하면 아래와 같이 걸려있는 함수를 환경변수 패널에서 확인 할 수 있다.
만약 아래와 같은 경고가 나온다면 이유는 두가지 이다.
첫 번째는 source()를 통해서 해당 파일을 읽어 들이지 않아서 그래서 object가 생성되지 않았을 때이다.
두 번째는 editor 상의 file과 source()로 읽어들인 file간의 차이가 존재 했을 때이다.
위 두상황 모두 source()를 해주면 해결 된다.
정상적으로 breakpoint를 걸었다면,
이제 해당 코드를 실행하면 원하는 위치에서 멈추는거을 알 수 있다.
R Studio는 디버깅 명령어들을 모두 위즈윅 모드로 제공하므로 마우스를 써서 디버깅 하면 된다.
디버깅 실행 화면
만약 source 코드가 없는 상태에서 디버깅 하고 싶다면?
install.packages("devtools")
참고문헌: Debugging with RStudio
'AI > R Basic' 카테고리의 다른 글
데이터 분리 및 병합 (split, subset, merge) (1) | 2015.10.22 |
---|---|
doBy package, 데이터 그룹 처리 (0) | 2015.10.22 |
R Studio 설치법 및 사용 Tip (0) | 2015.10.04 |
자료형(integer,character) 변환 및 데이터 구조(dataFrame, list) 변환 (3) | 2015.10.04 |
Apply 함수 (데이터 조작) (1) | 2015.10.03 |