2014-12-18 13 views
12

consideri il seguente esempio:R `Inf` quando si ha classe` date` sta stampando `NA`

structure(NA_real_, class = "Date") 
## [1] NA 
structure(Inf, class = "Date") 
## [1] NA 
is.na(structure(NA_real_, class = "Date")) 
## [1] TRUE 
is.na(structure(Inf, class = "Date")) 
## [1] FALSE 

Entrambi sono di stampa come NA. È questo il comportamento previsto o si tratta di un errore? È molto fastidioso vedere NA per qualcosa che non restituirà TRUE per is.na().

+1

Quindi, come esattamente _should_ 'print.Date' visualizza la" fine dei tempi ". –

+0

Bella domanda IMO. Spero non ti dispiaccia che ho aggiunto anche le uscite –

+0

La mia ipotesi migliore è perché 'unclass (struttura (Inf, class =" Date "))' non è 'NA' Inf non è veramente' NA', ma è per quanto riguarda la classe Date ... o qualcosa del genere –

risposta

7

Questo è il comportamento previsto. Che cosa è stampato non è ciò che l'oggetto è. Per essere stampato, l'oggetto deve essere convertito in carattere. as.character.Date chiamate format.Date, che chiama format.POSIXlt. La sezioneValore di ?format.POSIXlt (o ?strptime) dice:

Le format metodi e strftime vettori carattere di ritorno che rappresenta il tempo. NA volte vengono restituiti come NA_character_.

Ecco perché NA viene stampato, poiché la stampa structure(NA_real_, class = "Date") rendimenti NA_character_. Per esempio:

R> is.na(format(structure(Inf, class = "Date"))) 
[1] TRUE 
R> is.na(format(structure(NaN, class = "Date"))) 
[1] TRUE 

Se si verifica qualche modo queste date traballante nel codice, vi consiglio di provare per loro usando is.finite invece di is.na.

R> is.finite(structure(Inf, class = "Date")) 
[1] FALSE 
R> is.finite(structure(NaN, class = "Date")) 
[1] FALSE 
Problemi correlati