Date와 function의 응용
R을 조금씩 배워가고 있는 중인데
책에 나온 예제들만 따라 하는 게 너무 지겨워서
코드들을 응용해서 재미있는 것을 만들어 보기로 했다.
현재 시간을 알려주는 Sys.Date와 function 기능을 이용하여 D_Day 계산기를 만들어보기로 했다.
먼저 Sys.Date() 함수에 대해서 간단히 알아보자.
# Sys.Date는 시스템 날짜를 알려준다.
# Sys.time는 날짜와 시간을 알려준다. 초단위까지 알려주고 KST(Korea Standard Time) 한국 기준시간으로 알려준다.
# x <- "2017-03-28"을 하면 따옴표가 있기 때문에 당연히 문자로 인식한다.
# as.Date를 이용하여 "2017-03-28"을 날짜로 인식하게 해 준다.
그런데 3월 28일, 2017년 이렇게 표현한다면 얘가 잘 인식을 할까?
안타깝게도 년-월-일 이 표준 서식이기 때문에 오류가 뜬다.
그래도 해결 방법은 있다!
format 을 이용하여 내가 입력한 날짜들을 어떤 순서로 인식할 것인지 지정해주면 된다.
#format = "%m-%d-%Y"
여기서 m은 월, d는 일, Y는 네 자릿수로 입력된 년을 뜻한다.
하이픈(-)이 있으면 하이픈을 입력하고 없으면 없는 순서대로 입력하면 된다.
재미있게도 Date는 기본적인 연산도 가능한데
날짜 - 날짜를 하여 얼마나 차이 나는지 알 수 있다.
5월 9 일 대선까지 며칠이나 남았는지 확인해보니
42일의 차이가 있다고 알려준다. 즉 대선까지는 42일이 남은셈이다.
이 부분에서 나는
내가 원하는 대상 날짜만 입력하면 오늘부터 그 날까지 얼마나 남았는지 계산해주는 D_Day 기능을 만들면 좋겠다고 생각했다.
function기능의 쓰임은 계속 배우는 중인데, 익힐수록 재미있다. 더 능숙하게 쓸 수 있었으면 좋겠다.
일단 종강(6월 22일)까지 얼마나 남았는지 살펴보자.
맙소사...종강까지 무려 86일이나 남았다 ㅜㅠ
여튼 정신을 다시 부여잡고 D_Day 함수 만들기에 집중해보자
arg1 에 현재 날짜, arg2에 내가 원하는 대상 날짜를 넣고
arg2 - arg1을 하여 D_Day를 구했다..!
D_Day 함수 만들기 성공~!!!
사실 이것 만드는 데에만 2시간이 넘게 걸렸다...ㅜㅠ
오류가 많이 뜨기도 했고, 함수를 이용하는 데에 미숙했기 때문이다.
그래도 내가 처음으로 만든 의미 있는 함수라 정말 기뻤다.
성공의 기쁨도 잠시...
지정된 포맷을 따르지 않으면 NA값이 뜬다는 것을 알았다. 그리고 따옴표를 붙이지 않으면 인식을 못한다.
따옴표 문제는... 원래 애초에 as.Date()를 할 때 ""가 있어야 하기 때문에 내가 손 볼 부분이 아닌 듯하다.
다른 사람도 내 D_Day 함수를 무리 없이 쓰게 하려면...
NA값이 뜰 경우를 줄여야 한다.
그렇게 고민을 하면서 function을 다시 만지작 거리기 시작했다.
arg1, arg2 를 쓰지 않고 더 간단하게 함수를 만들긴 했으나 여전히
지정된 포맷의 문제는 해결하지 못했다...ㅜㅠ
결국 교수님께 이메일로 SOS를 쳤고
감사하게도 하루 안에 답장을 해 주셨다!
역시 해결사이시다.
하이픈의 유무에 상관없이 D_Day까지의 차이를 알려주는 함수다.
자세히 살펴보면...
if 구문에 else를 두 번 쓴 것이 보이는데
이 부분에서 정말 놀라웠다. 하이픈이 있나, 없나 두 가지 모두 포괄할 수 있는 해결책이었기 때문이다.
그리고 !is.na 사용하여 일단 NA값이 튀어나오는지 확인하는 것부터 기발했다...
교수님 찬스 자주 애용해야겠다~~ ㅋㅋㅋ