Rev 51211 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed
% File src/library/base/man/sample.Rd% Part of the R package, http://www.R-project.org% Copyright 1995-2010 R Core Development Team% Distributed under GPL 2 or later\name{sample}\alias{sample}\alias{sample.int}\title{Random Samples and Permutations}\description{\code{sample} takes a sample of the specified size from the elementsof \code{x} using either with or without replacement.}\usage{sample(x, size, replace = FALSE, prob = NULL)sample.int(n, size = n, replace = FALSE, prob = NULL)}\arguments{\item{x}{Either a vector of one or more elements from which to choose,or a positive integer. See \sQuote{Details.}}\item{n}{a positive number, the number of items to choose from. See\sQuote{Details.}}\item{size}{a non-negative integer giving the number of items to choose.}\item{replace}{Should sampling be with replacement?}\item{prob}{A vector of probability weights for obtaining the elementsof the vector being sampled.}}\details{If \code{x} has length 1, is numeric (in the sense of\code{\link{is.numeric}}) and \code{x >= 1}, sampling \emph{via}\code{sample} takes place from \code{1:x}. \emph{Note} that thisconvenience feature may lead to undesired behaviour when \code{x} isof varying length in calls such as \code{sample(x)}. See the examples.Otherwise \code{x} can be any \R object for which \code{length} andsubsetting by integers make sense: S3 or S4 methods for theseoperations will be dispatched as appropriate.For \code{sample} the default for \code{size} is the number of itemsinferred from the first argument, so that \code{sample(x)} generates arandom permutation of the elements of \code{x} (or \code{1:x}).As from \R 2.11.0 it is allowed to ask for \code{size = 0} sampleswith \code{n = 0} or a length-zero \code{x}, but otherwise \code{n >0} or positive \code{length(x)} is required.Non-integer positive numerical values of \code{n} or \code{x} will betruncated to the next smallest integer, which has to be no larger than\code{\link{.Machine}$integer.max}.The optional \code{prob} argument can be used to give a vector ofweights for obtaining the elements of the vector being sampled. Theyneed not sum to one, but they should be non-negative and not all zero.If \code{replace} is true, Walker's alias method (Ripley, 1987) isused when there are more than 250 reasonably probable values: thisgives results incompatible with those from \R < 2.2.0, and there willbe a warning the first time this happens in a session.If \code{replace} is false, these probabilities are appliedsequentially, that is the probability of choosing the next item isproportional to the weights amongst the remaining items. The numberof nonzero weights must be at least \code{size} in this case.\code{sample.int} is a bare interface in which both \code{n} and\code{size} must be supplied as integers.}\value{For \code{sample} a vector of length \code{size} with elementsdrawn from either \code{x} or from the integers \code{1:x}.For \code{sample.int}, an integer vector of length \code{size} withelements from \code{1:n},}\references{Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988)\emph{The New S Language}.Wadsworth & Brooks/Cole.Ripley, B. D. (1987) \emph{Stochastic Simulation}. Wiley.}\seealso{Package \pkg{sampling} for other methods of weighted sampling withoutreplacement.}\examples{x <- 1:12# a random permutationsample(x)# bootstrap resampling -- only if length(x) > 1 !sample(x, replace=TRUE)# 100 Bernoulli trialssample(c(0,1), 100, replace = TRUE)## More careful bootstrapping -- Consider this when using sample()## programmatically (i.e., in your function or simulation)!# sample()'s surprise -- examplex <- 1:10sample(x[x > 8]) # length 2sample(x[x > 9]) # oops -- length 10!sample(x[x > 10]) # length 0## For R >= 2.11.0 onlyresample <- function(x, ...) x[sample.int(length(x), ...)]resample(x[x > 8]) # length 2resample(x[x > 9]) # length 1resample(x[x > 10]) # length 0}\keyword{distribution}