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.

Otherwise `x`

can be any R object for which `length`

and
subsetting by integers make sense: S3 or S4 methods for these
operations will be dispatched as appropriate.

For `sample`

the default for `size`

is the number of items
inferred from the first argument, so that `sample(x)`

generates a
random permutation of the elements of `x`

(or `1:x`

).

It is allowed to ask for `size = 0`

samples with `n = 0`

or
a length-zero `x`

, but otherwise `n > 0`

or positive
`length(x)`

is required.

Non-integer positive numerical values of `n`

or `x`

will be
truncated to the next smallest integer, which has to be no larger than
`.Machine$integer.max`

.

The optional `prob`

argument can be used to give a vector of
weights for obtaining the elements of the vector being sampled. They
need not sum to one, but they should be non-negative and not all zero.
If `replace`

is true, Walker's alias method (Ripley, 1987) is
used when there are more than 200 reasonably probable values: this
gives results incompatible with those from R < 2.2.0.

If `replace`

is false, these probabilities are applied
sequentially, that is the probability of choosing the next item is
proportional to the weights amongst the remaining items. The number
of nonzero weights must be at least `size`

in this case.

`sample.int`

is a bare interface in which both `n`

and
`size`

must be supplied as integers.

Argument `n`

can be larger than the largest integer of
type `integer`

, up to the largest representable integer in type
`double`

. Only uniform sampling is supported. Two
random numbers are used to ensure uniform sampling of large integers.