2014-03-04 2 views
2

예기치 않게 예기치 않은 lubridate의 동작을 발견했습니다. 다음 R 코드 대신 '2010-10-17 8시 0분 0초'의의 NA를 반환R : lubridate가 NA를 예상외로 반환 함

library(lubridate); 
as.POSIXct("2010-10-17 07:59:01") + seconds(59); 
as.POSIXct("2010-10-17 07:59:30") + seconds(30); 

다음 코드는 예상 값을 반환하는 반면 ('2010-10-17 7시 59분 0초') :

as.POSIXct("2010-10-17 07:58:01") + seconds(59); 
as.POSIXct("2010-10-17 07:58:30") + seconds(30); 

이것은 lubridate의 버그입니까? 아니면 단순히 RTFM을 완전히 철저히해야합니까?! :)

UPDATE : 사용 소프트웨어 :은 GNU R의 V 3.0.2, lubridate 1.3.3

업데이트 2 : dseconds 대신이 문제를 해결 초 사용.

올바른 결과에 의해 계산된다

as.POSIXct("2010-10-17 07:58:01") + dseconds(59); 
as.POSIXct("2010-10-17 07:58:30") + dseconds(30); 
+0

보인다. –

+0

당신은 어떤 수업을 만들었습니까? ""2010-10-17 07:59:01 "'(수표로)? –

+0

@ Joshua : 감사합니다. 그러나 달을 유효한 값으로 바꿀 수 있으며 그 행동은 그대로 유지됩니다. – TOBx2

답변

2

최종 편집 : 알려진 버그 : https://github.com/hadley/lubridate/issues/188

말하자면 나는 버그를 발견 : 분명히 POSIXct - 클래스 오브젝트 당신은 그것의 seconds을 수정할 수 있습니다 부분을 ​​제외하고는 "carry"기능이 없으므로 총 초가 59를 초과하면 강제 종료됩니다.

Rgames> as.POSIXct("2010-10-17 07:59:30")->dfoo 
Rgames> dfoo 
[1] "2010-10-17 07:59:30 EDT" 

Rgames> second(dfoo) 
[1] 30 
Rgames> second(dfoo)<-second(dfoo)+10 
Rgames> dfoo 
[1] "2010-10-17 07:59:40 EDT" 
Rgames> second(dfoo)<-second(dfoo)+seconds(10) 
Rgames> dfoo 
[1] "2010-10-17 07:59:50 EDT" 
Rgames> second(dfoo)<-second(dfoo)+seconds(10) 
Rgames> dfoo 
[1] NA 

lubridate::secondssecond 기능의 사용 목적은 무엇입니까, 나는 몰라,하지만 분명히이 :-(갈 수있는 방법이 아니다

편집 :. 나는 위와 dfoo로, 재생 유지 그리고 dbar <- as.POSIXct("2010-10-17 07:59:30",tz='GMT'). dbar w/o 문제에 임의의 초를 추가 할 수 있습니다. 또한 dfoodbar에 대한 시간대를 전환하고 할당 된 영역에 관계없이 임의의 초를 성공적으로 추가 할 수 있습니다. 이것은 궁금합니다. as.POSIXct의 [수정 된] 내용이 기본값 tz='' 인수!

편집 2 : 봐, 봐 : 그것은 시간의 문제를 절약 시간대 및/또는 일광이 될 수 있었던 것처럼

Rgames> as.POSIXct("2010-10-17 07:59:30")->dfoo 
Rgames> dfoo + seconds(55) 
[1] "2010-10-17 08:00:25 EDT" 
Rgames> dfoo + seconds(30) 
[1] NA 
Rgames> dfoo + seconds(31) 
[1] "2010-10-17 08:00:01 EDT" 
Rgames> dfoo + seconds(29) 
[1] "2010-10-17 07:59:59 EDT" 
+0

고마워요 !!! (dseconds는 길 인 것 같습니다. 업데이트 2를 참조하십시오.) – TOBx2

+0

이유가 확실하지 않지만 패키지 설명에 따르면 1 초도 채울 수 있습니다. –

+0

http : //www.r-statistics에서 기사를 읽으십시오.co.kr/2012/03/do-more-with-dates-and-r-with-lubridate-1-1-0 /'lubridate :: seconds'는 마침표로 보입니다. 의도적으로 정확하지만'lubridate :: dseconds'는 디자인 상 정확한 지속 시간으로 처리되므로 롤오버를 사용하여 오브젝트에 부정확 한 시간을 추가하려고 할 때 어쩌면 부정확 때문에? 문서는 명확하지 않지만 명심해야 할 사항입니다. –