2011-09-25 9 views
7

Ho un elenco di date che desidero campionare. A volte lo spazio campione sarà solo una singola data, ad es. campione ("10/11/11", 1). Le date sono memorizzate come oggetti chron, quindi quando ho una singola data nel mio spazio campione (e solo allora) il campione tratta questo come un vettore (1: date). La documentazione per il campione lo segnala:Utilizzo di sample() con dimensione dello spazio campionario = 1

If ‘x’ has length 1, is numeric (in the sense of ‘is.numeric’) and 
‘x >= 1’, sampling _via_ ‘sample’ takes place from ‘1:x’. _Note_ 
that this convenience feature may lead to undesired behaviour when 
‘x’ is of varying length in calls such as ‘sample(x)’. See the 
examples. 

Ma non ho visto un modo per disabilitare questa funzione. C'è una soluzione alternativa o un modo per impedirgli di trattare oggetti di lunghezza uno come numerici?

risposta

12

La documentazione sample Raccomanda questo:

resample <- function(x, ...) x[sample.int(length(x), ...)] 
+0

sempre opportuno seguire gli esperti. –

+0

Grazie. Aggiunto al mio profilo .RR. –

+0

Molto bello. E il tuo uso di 'sample.int' lo rende un po 'più veloce di' sample' su un vettore arbitrario di lunghezza> 1 –

4

Vorrei inserirlo in un'istruzione if o avvolgerlo in un'altra funzione. Per esempio:

mysample <- 
function(x, size, replace=FALSE, prob=NULL) 
{ 
    if(length(x)==1) 
    return(rep(x, size)) 

    sample(x, size, replace, prob) 
} 
Problemi correlati