1. General
1) 코드에 코멘트 달기 - "#" 을 이용하여 아래와 같이 코멘트를 달 수 있다.
> load("~/myfirstRobjects.rdata", ex <- new.env()) #어쩌고 저쩌고
> ls.str(ex) # 코멘트 달기
savevector1 : int [1:9] 1 2 3 4 5 6 7 8 9
savevector2 : chr "Yay!"
>
"#"의 왼편에 위치한 코드만 실행된다.
코멘트가 중요한 이유는 여러분이 잊어버리지 않기 위해서도 중요하지만 여러분의 코드를 쓰는 다른 이들을 위해서도 중요하다는 점은 두말할 나위가 없다.
2) 하드 코드를 쓰지 말 것
예를 들어, 설사 길이가 변하지 않는다고 하더라도 벡터의 길이와 같은 하드 코드를 쓰지말고 length() 와 같은 함수를 이용해라.
아래 예제에서 2번 코드가 더 훌륭한 이유는 벡터의 길이를 변수로 받기 때문이다.
10보다 작은 값을 인풋한다고 해도 위와 같은 습관을 들이는 것이 좋다.
예1. 나쁜 예 | 예2. 좋은 예 |
sampleforloop <- function(inputvector) { for(i in 1:10) { inputvector[i] = i } } | sampleforloop <- function(inputvector) { for(i in 1:length(inputvector)) { inputvector[i] = i } } |
3) 한 자릿수의 변수 이름은 쓰지말 것
4) 변수 이름을 짧게 쓸 것
(1) 간결하지만 명확하게 변수 이름을 붙일 것
(2) 변수 이름을 숫자로 시작하지 말 것
(3) " "(공백), "$" 은 변수 이름으로 쓰지 말 것 (하지만 "-" 은 괜찮다)
2. Matrix Multiplication
loop 를 피하고 행렬을 최대한 구사해야한다. R은 여러분이 수행하는 많은 계산들이 행렬의 곱을 다루고 있다는 데 기반해서 만들어졌다. 사소한 팁일수도 있지만 대량의 데이터 셋을 다루는데 있어서는 행렬의 곱을 사용하는 것과 "for" loop 구문을 사용하는데는 차이가 크다.
1) 행렬의 곱으로 구현
matrix1 = matrix(sample(c(0, 1), 100, replace = T), nrow = 10)
matrix2 = matrix(rnorm(100), nrow = 10)
matrix3 = matrix1%*%matrix2
2) "for" loop 구문으로 구현
for(i in 1:length(matrix1[1,])) {
for(j in 1:length(matrix1[,1])) {
matrix3[i,j] = matrix1[j,]%*%matrix2[,i]
}
}
nested "for" loops 로 1) 과 같은 연산이 가능하지만 2) 의 경우가 훨씬 처리속도가 느리다.
3. Plan
실제 프로그래밍하는 시간보다 2배의 시간을 프로그램을 스케치하고 공식화하는데 투자해라. 물론 단순히 R 에만 적용되는 팁은 아니지만 말이다.
4. Debug
코드를 디버그하는 것은 무척이나 짜증나는 일일 수 있지만, 좌절하지말고 프로그램의 처음부터 끝까지 찬찬히 살펴보라. 경우에 따라서는 종이와 펜을 준비해서 샘플 값을 넣어보고 각각의 단계에서 어떻게 결과치가 나오는지 살펴보는 것도 유용하다.
디버깅에는 debug() 함수를 이용해보는 것도 좋다.
> debug(functionname(input))
print() 함수를 추가해서 연산 실행 후 결과치를 확인해보는 것도 도움이 된다.
samplevector1 = samplevector1^2
print(samplevector1)
5. Help
온라인상의 다수의 R 포럼을 활용하는 것도 큰 도움이 될 수 있다.
6. Packages
패키지 설치방법에 대해서는 다음에 다루기로 한다.
유용한 패키지 모음 http://cran.r-project.org/web/packages/available_packages_by_name.html
'프로그래밍 Programming' 카테고리의 다른 글
R 프로그래밍 - 참고자료 Further Resources (0) | 2014.09.06 |
---|---|
R 프로그래밍 - R 편집기 R Editors (WinEDT, Tinn-R) (0) | 2014.09.06 |
오라클 잡 스케줄링 dbms_job.submit (0) | 2014.09.05 |
리눅스Linux 시간 수동 설정 (date, hwclock) (0) | 2014.09.05 |
R 프로그래밍 - Functions (Custom) (1) | 2014.08.30 |