2015-05-08 8 views
14

Stavo cercando di capire il modo migliore per gestire la capacità di Postgresql di rappresentare Infinity e -Infinity nel loro timestamp quando si utilizza RPostgreSQL per trasferire i dati in R. Lungo la strada ho trovato un comportamento strano quando si cercava di rappresentare infinite date in R .Perché le date a infinito sembrano NA ma si comportano come le date?

posso tentare di creare una data all'infinito negativo e positivo nel seguente modo:

❥ as.Date(-1/0, origin="1970-01-01") 
[1] NA 
❥ as.Date(1/0, origin="1970-01-01") 
[1] NA 

entrambi sembrano essere AN. Tuttavia, confrontandoli, sembra esserci la consapevolezza che uno è minore dell'altro.

❥ as.Date(-1/0, origin="1970-01-01") < as.Date(1/0, origin="1970-01-01") 
[1] TRUE 
❥ as.Date(-1/0, origin="1970-01-01") > as.Date(1/0, origin="1970-01-01") 
[1] FALSE 
❥ as.Date(1/0, origin="1970-01-01") > as.Date("1970-01-01") 
[1] TRUE 
❥ as.Date(1/0, origin="1970-01-01") < as.Date("1970-01-01") 
[1] FALSE 

Come fa R a sapere la differenza, se entrambi convertono in NA?

+0

Io non sono un esperto di R ma la mia ipotesi è che questi siano internamente rappresentati come casi speciali e puoi facilmente confrontarli dicendo sempre che tutto è finito -Infinity (data) e tutto è prima di Infinity (data). La maggior parte dei linguaggi di programmazione tratta comunque tali valori come casi speciali (come oggetti comunque). –

risposta

13

Non convertono in NA, è così che vengono stampati.

R> d <- as.Date(-Inf, origin="1970-01-01") 
R> is.na(d) 
# [1] FALSE 
R> is.infinite(d) 
# [1] TRUE 

Se si desidera loro di stampare in modo diverso, è possibile ignorare il metodo print.Date e aggiungere casi particolari per +/- infinito.