2011-09-25 5 views
7

Tengo una lista de fechas de las que deseo tomar muestras. A veces, el espacio de muestra será una sola fecha, p. muestra ("10/11/11", 1). Las fechas se almacenan como objetos cron, de modo que cuando tengo solo una fecha en mi espacio de muestra (y solo entonces) la muestra trata esto como un vector (1: fecha). La documentación para la muestra señala esto:Uso de la muestra() con tamaño de espacio de muestra = 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. 

Pero no vi una forma de desactivar esta función. ¿Existe una solución alternativa o una forma de evitar que trate los objetos de longitud uno como numéricos?

Respuesta

12

La documentación sample recomienda lo siguiente:

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

siempre aconsejable seguir los expertos. –

+0

Gracias. Agregado a mi .Rprofile. –

+0

Muy agradable. Y su uso de 'sample.int' en realidad lo hace un poco más rápido que' sample' en una longitud arbitraria> 1 vector –

4

Me gustaría envolverlo en una declaración if, o envolverlo dentro de otra función. Por ejemplo:

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

    sample(x, size, replace, prob) 
} 
Cuestiones relacionadas