lubridate 패키지를 한글 윈도우에서 쓰기

정말 이런 팁 같은 거 잘 올리지 않는데, 유용한 거라 공유해 본다.

lubridate 패키지는 R에서 다루기 힘든 date객체나 datetime객체를 다루기 위해 필요한 패키지이며, 실무 일을 하면 거의 필수로 사용된다.

요게 한글 윈도우에서 동작하지 않아서 리눅스에서 주로 작업을 하곤 했는데, 한글 윈도우에서 작업할 때가 있어 유심히 함수를 살펴보다 해결책을 발견했다. 해결책이라고 이야기 하긴 뭐하고 그냥 팁 수준이다.

R에서 함수가 동작하는데 멀티바이트 나오는거면 바로 한글문제이며, 바로 생각해볼 수 있는 설정은 바로 로케일이다. 이 로케일을 바꿔주면 대부분 해결된다. 사실 전체 LC_ALL을 바꿔주는건 아예 한글을 쓰지 않겠다는 이야기니 위험하고, 시간에 대한 것만 로케일을 아래와 같이 바꿔주면 된다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
library(lubridate)
 
Sys.getlocale("LC_TIME")
# [1] "Korean_Korea.949"
 
ymd("2013-01-03")
# 다음에 오류gsub("+", "*", fixed = T, gsub(">", "_e>", num)) : '<ec><98><a4>?<84>|<ec>삤<ed>썑)(?![[:alpha:]]))|((?<h_f_e>2[0-4]|[01]?\d)\D+(?<m_f_e>[0-5]?\d)\D+((?<os_f_s_e>[0-5]?\d\.\d+)|(?<s_f_e>[0-6]?\d))))'에 잘못된 멀티 바이트 문자가 있습니다
 
Sys.setlocale("LC_TIME", "C")
# [1] "C"
ymd("2013-01-03")
# 1 parsed with %Y-%m-%d
# [1] "2013-01-03 UTC"
 
 
 
Sys.setlocale("LC_TIME", "Korean_Korea.949")
format(Sys.time(), "%a %b %d %X %Y %Z")
# [1] "목 1 03 오후 2:26:21 2013 KST"
 
Sys.setlocale("LC_TIME", "C")
format(Sys.time(), "%a %b %d %X %Y %Z")
# [1] "Thu Jan 03 14:26:34 2013 KST"

이렇게 되면 한글로 “년,월,일” 출력이 되지 않는데 이런 부분에 대해서 큰 문제가 없을 경우에 위와 같이 설정해서 사용하는 것도 좋을 거 같다. 물론 한글로 된 날짜 포맷이 필요할 경우 다시 Sys.setlocale() 명령으로 환경변수를 기존 설정으로 변환해서 사용할 수도 있을 것이다.  물론 lubridate 패키지의 함수에서 locale 파라메터에 “C”를 명시해서 사용해도 된다. 아무래도 환경 독립적으로 코드를 실행해야 될 필요가 있다면 이 방법이 나을 수 있을지도 모르겠다.

 

필자의 경우 “Rprofile.site” 파일에 위 설정을 추가해서 R이 수행될 때마다 실행이 되게끔 했다. 어차피 날짜 포맷은 본인이 어떻게 파싱하기 나름이니 한글 포맷에 큰 의미는 없을 걸로 예상한다. 

CC BY-NC 4.0 lubridate 패키지를 한글 윈도우에서 쓰기 by from __future__ import dream is licensed under a Creative Commons Attribution-NonCommercial 4.0 International License.