티스토리 뷰
R은 대용량을 처리하기 위해 사용하고 메모리 기반으로 동작하기 때문에 캐시를 활용하는 경우가 종종 필요하다.
특정하게 계산된 데이터를 캐시하는 예제를 살펴보기로 한다.
캐시를 사용하기 위해서 현재의 environment가 아닌 다른 environment에서도 접근할 수 있도록 값을 할당할 필요가 있다.
R에서 "<-" 대신 "<<-" 을 사용함으로써 이와 같이 처리할 수 있다.
평균값을 캐시하는 함수
먼저 벡터를 저장하는 makeVector 함수를 생성하고
여기에서 벡터값을 설정하고 가져오는 메소드와, 벡터의 평균을 저장하고 가져오는 메소드를 만들면 다음과 같다.
숫자 벡터를 makeVector로 생성하면, 리스트로 리턴되는 set, get, setmean, getmean을 접근할 수 있다.
"<<-" 연산자를 사용하여 x와 m값을 외부에서도 접근할 수 있도록 설정하였다.
이제 makeVector를 통해 생성된 숫자 벡터를 통해 평균값을 캐시에서 읽어오는 함수를 구성하면 다음과 같다.
먼저 x$getmean()으로 캐시된 평균값이 존재하는지 확인한다.
캐시가 있을 경우, "getting cached data"를 출력하고 그 값을 리턴한다.
없는 경우에는 mean()을 활용해 평균을 구한 다음 x$setmean(m)으로 평균을 캐시하고 리턴한다.
실제 활용한 예제를 살펴보면 다음과 같다.
cachemean(x)를 두번째 호출했을 때, "getting cached data" 텍스트로 캐시에서 값을 불러왔음을 확인할 수 있다.
역행렬을 캐시하는 함수 만들어보기
위 예제는 coursera에서 Roger Peng 교수의 R Programming 수업의 과제 예제 중 하나이다.
이것을 참고해서 행렬의 역행렬을 구하는 것을 캐시하는 함수를 직접 만들어 보기 바란다.
1. makeCacheMatrix: 역행렬을 캐시할 수 있는 행렬을 생성하는 함수
2. cacheSolve: makeCacheMatrix를 통해 생성된 행렬에 대해 역행렬을 계산하는 함수로서 먼저 캐시에 저장된 역행렬이 있는지 확인한다.
이 함수는 makeVector, cachemean과 유사하게 만들면 되고,
R에서 역행렬을 구하는 것은 solve() 함수를 활용하면 된다.
이것은 직접 한번 만들어 보기 바란다.
미니의 R 주요 강좌...
R의 lapply, sapply, vapply를 이해하자~
'Cloud&BigData > R' 카테고리의 다른 글
R 디버깅 툴 활용하기~ (0) | 2015.10.14 |
---|---|
R 시뮬레이션 - 랜덤 변수 샘플링 (0) | 2015.10.08 |
R의 함수 작성 및 활용~ (0) | 2015.10.07 |
R의 split 활용 (0) | 2015.10.05 |
R의 apply, tapply의 활용법을 알아보자~ (0) | 2015.10.01 |