일부 시계열 조작을 수행하는 소프트웨어로 작업 중입니다. 나는 최근에 내가 개발 한 R 스크립트 측면에서 심각한 문제를 발견했다. 예기치 않은 동작이 로케일이 Europe/Moscow
인 특정 시스템에서 분리되었습니다. 이 문제는 다음 코드로 요약된다 : 보인다 유럽/모스크바 strptime 시간대 문제
strange_days <- c("2/1/1984", "3/1/1984", "4/1/1984", "5/1/1984", "6/1/1984")
Sys.setenv(TZ='Europe/Moscow')
d <- strptime(strange_days, '%m/%d/%Y')
d
[1] "1984-02-01 MSK" "1984-03-01 MSK" "1984-04-01" "1984-05-01 MSD" "1984-06-01 MSD"
모든 것이 올바르게 인식 할 수 있습니다. 나는 이것이 일별 데이터이기 때문에 시간대 속성이별로 차이가 없다고 생각했다. 고통스러운 실수 : 분명히 xts
객체로 변환시 이후에 실패
as.numeric(d)
[1] 444430800 446936400 NA 452203200 454881600
.
현재 수정 프로그램은 모든 시간대를 GMT (strptime(strange_days, '%m/%d/%Y', tz='GMT')
또는 Sys.setenv(TZ='GMT')
)로 강제 설정합니다. 그 문제는 사라졌다.
좋은 방법입니까? 모든 상황에서 코드가 신뢰할 수 있습니까? 유사한 문제를 피하기 위해 어떤 기술을 권하고 싶습니까?
그리고 1984 년 4 월 1 일에는 어떤 특별한 일이 일어 났습니까?
편집 : this 및 this 질문이 표시되어 아마 문제를 일으키는 일광 절약이다.
sessionInfo()
R version 3.1.0 (2014-04-10)
Platform: x86_64-w64-mingw32/x64 (64-bit)
locale:
[1] LC_COLLATE=English_United Kingdom.1252 LC_CTYPE=English_United Kingdom.1252 LC_MONETARY=English_United Kingdom.1252
[4] LC_NUMERIC=C LC_TIME=English_United Kingdom.1252
attached base packages:
[1] stats graphics grDevices utils datasets methods base
loaded via a namespace (and not attached):
[1] tools_3.1.0
편집 2 : 당신은 시간 만에 관심이 아니에요 이후,이 경우
R version 3.1.0 (2014-04-10)
Platform: i686-pc-linux-gnu (32-bit)
locale:
[1] LC_CTYPE=en_US.UTF-8 LC_NUMERIC=C LC_TIME=en_US.UTF-8 LC_COLLATE=en_US.UTF-8
[5] LC_MONETARY=en_US.UTF-8 LC_MESSAGES=en_US.UTF-8 LC_PAPER=en_US.UTF-8 LC_NAME=C
[9] LC_ADDRESS=C LC_TELEPHONE=C LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C
attached base packages:
[1] stats graphics grDevices utils datasets methods base
loaded via a namespace (and not attached):
[1] tools_3.1.0
[일광 절약 시간이 러시아에서 1984 년에 시작]되는 정확한 날짜는 (http://www.timeanddate.com/time/dst/1984.html)이 4 월 ... – plannapus
의 1이다 'as.Date'를 사용하지 않는 이유는 무엇입니까? – plannapus
또한 어떤 R/OS 버전을 사용하고 있습니까? Mac OS X 10.7.5와 R 2.14.2에서 저는 as.numeric (d)가 나타납니다. [1] 444430800 446936400 449611200 452203200 454881600' – plannapus