R과 kdb+에서 Datetime/POSIXct 동작 정정

R-Blogger · 블로그·해설 · 2009-02-17

R-Blogger블로그·해설한국어2009-02-17

R과 kdb+에서 Datetime/POSIXct 동작 정정

R과 kdb+ 연동: datetime 처리 개선 우리는 kdb+를 고성능 컬럼 스토어 백엔드로 검토하기 시작했습니다. Kx는 무료 체험판을 제공하므로, 저는 하루 정도 시스템 전반과 데이터 로드, 덤프, 특히 R 인터페이스를 활용해 보았습니다. 몇 개의 파일(C 소스 한 개, R 파일 한 개, 객체 파일 한 개, 헤더 파일 한 개, 간단한 Makefile)만 있으면, 이 코드를 CRAN 스타일의 R 패키지로 만들 수 있었으며, 몇 분 안에 완료했습니다. 이 글을 올리게 된 이유는 R / kdb+ 연동 코드가 잘 동작하지만, datetime 처리에 문제가 있었기 때문입니다. 저는 숫자나 문자열처럼 시스템 간에 날짜/시간 객체를 원활히 전달하고 싶었으며, Rcpp 패키지처럼 C++와 R 사이에서 처리한 경험도 있습니다. 그런데 밀리초 타임스탬프가 부드럽게 이동하지 않아 다소 불편했습니다. 코드의 기본 변환 함수에 몇 가지 문제가 있었는데, 정수로 변환하고, 스칼라에만 적용하며, 참조 카운트를 잘못 감소시키는 것이었습니다. 제 생각에 더 나은 버전은 다음과 같습니다: static SEXP from_datetime_kobject(K x) { SEXP result; int i, length = x-n; if (scalar(x)) { result = PROTECT(allocVector(REALSXP, 1)); REAL(result)[0] = (kF(x)[0] + 10957) * 86400; } else { result = PROTECT(allocVector(REALSXP, length)); for(i = 0; i 이 함수는 스칼라와 벡터 모두를 처리하며, kdb+의 '2000년 1월 1일 이후의 소수형 일수'를 Unix 표준인 epoch 이후 초 단위로 변환합니다. 또한 R에서 요구하는 POSIXt/POSIXct 클래스 속성을 올바르게 설정합니다. 덕분에 테이블에서 단순히 최대 datetime을 선택해도 정확한 값을 얻을 수 있고, 거래나 인용(quote) 같은 타임스탬프가 포함된 기록 벡터도 R에서 적절한 POSIXct 동작을 갖습니다. 단, TZ를 UTC로 설정해야 합니다. 그렇지 않으면 원하지 않는 시간대 오프셋이 적용될 수 있습니다.
원문 URL
전체 글은 원문 페이지에서 이어서 읽을 수 있습니다.
원문에서 전체 글 읽기
작성자
R-Blogger
출처
R-Blogger
플랫폼
R-Blogger
분류
블로그·해설
언어
한국어
발행일
2009-02-17