[Rd] sample suggestion

Duncan Murdoch murdoch at stats.uwo.ca
Thu Oct 7 12:45:43 CEST 2004


On Thu, 7 Oct 2004 09:00:01 +0200, gb at stat.umu.se (Göran Broström)
wrote:

>I have been bitten by what is clearly described on the help page for
>'sample', namely sampling from a population of size one. I agree that it is
>convenient to have an exception if 'length(x) == 1', but my suggestion is
>to enforce the exception only if 'x' is numeric. In any case, if x is not
>numeric and of length 1, all you get is an error message.
>
>I would like 'sample("tre", 1)' to return "tre", and 'sample(3, 1)' to
>return a natural number less than 4. It seems easy to achieve that by
>changing the line
>
>if (length(x) == 1 && x >= 1) {
>
>to
>
>if (length(x) == 1 && is.numeric(x) && x >= 1) {
>
>in 'sample'.
>
>Isn't that a good idea? An alternative suggestion would be to implement
>'resample' (from the examples) in 'base'.

I agree that's a good suggestion; I think it would be even better to
add an extra argument to sample to say how to handle a length 1
population vector, e.g.

sample(x, size, replace = FALSE, prob = NULL, expand = is.numeric(x))

 ...

if (length(x) == 1 && expand && x >= 1) {

so that the resample() example would be simply

sample(x[x > 9], expand = FALSE)


The case of zero-length x would still need to be handled separately,
or generate an error.

Duncan Murdoch



More information about the R-devel mailing list