나는이 문제가 여전히 32 비트 R 3.01을 위해 존재하는지와이의 32 비트 구현에 고유 부동 소수점 데이터의 절단에 의한 것을주의했다 : 직접 format
를 호출하여이를 볼 수 있습니다 POSIXlt 날짜 시간에 대한 print, format 및 as.character 연산자.
기본 데이터는 하나의 사례 (32 비트)에서는 잘리지 않는 다른 유형으로 저장되지 않고 다른 데이터 (64 비트)에서는 저장되지 않지만 "인쇄", "형식"및 "as.character" POSIXlt 데이터를 표시 가능한 문자열로 표시하는 데 사용되는 POSIXlt 유형에 대한 함수입니다.
문서화 된 동작은 (@Gavin Simpson에서 언급 한) 추가 숫자를 자르거나 무시한다는 것이지만 32 비트 및 64 비트 버전의 경우에는 마찬가지입니다. 시연; 우리는 1000 서로 다른 시간을 생성하고 몇 가지 비교 작업을 수행 할 수 있습니다 :
> x[1:6]
[1] "2015-10-16 13:29:56.000 UTC" "2015-10-16 13:29:56.000 UTC"
[3] "2015-10-16 13:29:56.002 UTC" "2015-10-16 13:29:56.003 UTC"
[5] "2015-10-16 13:29:56.003 UTC" "2015-10-16 13:29:56.005 UTC"
그래서 그것이 : 모두 32 비트 및 64 비트 비교 연산자 그러나 아래 32 비트 내가 볼, 일치는 아래
> options(digits.sec=3)
> x = as.POSIXlt("13:29:56.061", format='%H:%M:%OS', tz='UTC')
> for (i in 0:999) {
> x[i+1] = as.POSIXlt(paste0("13:29:56.",sprintf("%03d",i)),format='%H:%M:%OS',tz='UTC')
> }
> sum(x[2:1000]>x[1:999])
[1] 999
을 명확하게 디스플레이 문제. 의 POSIXlt 데이터 형식에 실제 숫자에 특히 초를 찾고 우리는 일이 나타나는 것을 볼 수 있습니다
> y = (x[1:6]$sec)
> y
[1] 56.000 56.001 56.002 56.003 56.004 56.005
> trunc(y*1000)/1000
[1] 56.000 56.001 56.002 56.003 56.004 56.005
> trunc((y-floor(y))*1000)/1000
[1] 0.000 0.000 0.002 0.003 0.003 0.005
나는이 기본베이스 라이브러리에 고정해야 버그가 임시 수정 등이라고 제안 하지만 "print", "as.character"및 "format"함수를 덮어 쓰면 출력을 원하는 출력으로 변경할 수 있습니다.
format.POSIXlt = function(posix) {
return(paste0(posix$year+1900,"-",sprintf("%02d",posix$mon+1),"-",sprintf("%02d",posix$mday)," ",
sprintf("%02d",posix$hour),":",sprintf("%02d",posix$min),":",sprintf("%002.003f",posix$sec)))
}
print.POSIXlt = function(posix) {
print(paste0(posix$year+1900,"-",sprintf("%02d",posix$mon+1),"-",sprintf("%02d",posix$mday)," ",
sprintf("%02d",posix$hour),":",sprintf("%02d",posix$min),":",sprintf("%002.003f",posix$sec)))
}
as.character.POSIXlt = function(posix) {
return(paste0(posix$year+1900,"-",sprintf("%02d",posix$mon+1),"-",sprintf("%02d",posix$mday)," ",
sprintf("%02d",posix$hour),":",sprintf("%02d",posix$min),":",sprintf("%002.003f",posix$sec)))
}
여기서 format()의 사용은 불필요하고 혼란 스럽습니다. . . – mdsumner
그래, 우리는'format = '% H : % M : % OS' '가 필요하다. –
참조 http://stackoverflow.com/a/7730759/210673 – Aaron