2015-05-21 31 views
10

sto cercando di trovare la range di un frame di dati con i valori infiniti:R: intervallo (data.frame) può escludere valori infiniti?

> f <- data.frame(x=c(1,2),y=c(3,Inf)) 
> range(f) 
[1] 1 Inf 
> range(f,finite=TRUE) 
Error in FUN(X[[2L]], ...) : 
    only defined on a data frame with all numeric variables 
Calls: Summary.data.frame -> lapply -> FUN 
> range(f$y) 
[1] 3 Inf 
> range(f$y,finite=TRUE) 
[1] 3 3 

Perché mi appare l'errore?

Posso fare meglio di

> do.call(range,lapply(f,range,finite=TRUE)) 
[1] 1 3 

Si tratta di un bug? È noto? Dovrei segnalarlo?

+6

'gamma (non elencati (f), finito = TRUE)'? –

+0

è un bug (noto?)? – sds

+2

Hmm .. sembra un problema con alcuni metodi. 'range.default' funziona perfettamente, ad esempio' range.default (f, finito = TRUE) ' –

risposta

6

È necessario utilizzare (come David fa notare nei commenti):

range.default(f, finite=TRUE) 
# [1] 1 3 

o

range(f, finite=1) 
# [1] 1 3 

la funzione viene erroneamente richiedendo finite di essere numerico, ma poi lo usa correttamente rimuovendo valori infiniti. Avviso:

f2 <- data.frame(x=1:2, y=3:4) 
range(f2, finite=TRUE) # Error 

Chiaramente qualcosa di divertente sta accadendo con il generico di essere un primitivo e la tua tesi di essere un oggetto, probabilmente correlati a (da ?range):

gamma è una funzione generica: metodi possono essere definito per esso direttamente o tramite il gruppo Riepilogo generico. Affinché funzioni correttamente, gli argomenti devono essere senza nome e l'invio è sul primo argomento.

Quindi, in pratica, al momento del check i suoi argomenti, si pensa finite=TRUE fa parte dei dati per verificare la gamma, e dato che è una logica che non supera la prova per numericness. Detto questo, una volta superato tale controllo, viene calcolato correttamente.

Per confermare:

range(f, finite=2000) 
# [1] 1 3 
2

Ci sono probabilmente più possibilità. Se tutto è numerico allora si è

> f <- data.frame(x=c(1,2),y=c(3,Inf)) 
> range(as.matrix(f),finite=TRUE) 
[1] 1 3 
Problemi correlati