From rfrancois at mango-solutions.com  Thu Nov  9 09:53:51 2006
From: rfrancois at mango-solutions.com (Romain Francois)
Date: Thu, 09 Nov 2006 08:53:51 +0000
Subject: [Rd] generic sample
Message-ID: <4552EC9F.1000500@mango-solutions.com>

Hi,

When x is a data frame, sample(x) is not really sensible :

R> sample(iris) # sends back all the iris data set.

What about a generic sample function (from R-devel/src/library/base/R) 
with a method for class `data.frame` that would sample the row indexes 
and then do the subset. See the code below.


Cheers,


Romain


sample <- function(x, ...)
  UseMethod("sample")
 
sample.data.frame <- function(x, ...){
  x[ sample(1:nrow(x), ...), ]     
}


sample.default <- function(x, size, replace=FALSE, prob=NULL)
{
    if(length(x) == 1 && x >= 1) {
    if(missing(size)) size <- x
    .Internal(sample(x, size, replace, prob))
    }
    else {
    if(missing(size)) size <- length(x)
    x[.Internal(sample(length(x), size, replace, prob))]
    }
}


R> set.seed(4)
R> sample(iris, 5)
    Sepal.Length Sepal.Width Petal.Length Petal.Width    Species
88           6.3         2.3          4.4         1.3 versicolor
2            4.9         3.0          1.4         0.2     setosa
44           5.0         3.5          1.6         0.6     setosa
41           5.0         3.5          1.3         0.3     setosa
119          7.7         2.6          6.9         2.3  virginica



-- 
*mangosolutions*
/data analysis that delivers/

Tel   +44 1249 467 467
Fax   +44 1249 467 468



[Rd] generic sample
Romain Francois