[R] vector

Charles C. Berry cberry at tajo.ucsd.edu
Tue Dec 2 06:25:38 CET 2008


On Mon, 1 Dec 2008, Hamid Hamid wrote:

> Dear All,
> I am trying to build a program which will take repeated samples without
> replacement from a population of values. The interesting catch is that I
> would like the sample values to be removed from the population, after each
> sample is taken.

You mean ONLY 'after each sample is taken'? That is,  you sample with 
replacement, then remove the sample from the population, sample again with 
replacement and then remove those, ...

If that is not what you mean, ordinary sampling WOR will do.

If the scheme I describe above is what you meant, read on.

Sometimes it is efficient to vectorize in a way that yields an incomplete 
answer, then patch the result, then patch the patched result, ...

Here is an example that implements drawing samples with replacement, but 
removing each sample before drawing the next (so a single sample could 
contain duplicates, but no pair of samples could contain the same 
element):

> n <- c(3,3,4) # draw samples of size n[i]
> samp <- rep(seq(n),n) # index the sample
> trials <- sample(pop,sum(n),repl=TRUE) # fast but not always right
> index.first.like.me <- match(trials,trials)
> gotta.fix <- which( samp[ index.first.like.me ] < samp )
> trials[ gotta.fix ] <- sample( setdiff(pop,trials), length( gotta.fix ), repl=TRUE )
> index.first.like.me <- match(trials,trials)
> gotta.fix <- which( samp[ index.first.like.me ] < samp )
> length(gotta.fix) # see if there are any cases to fix
[1] 0
>

Obviously, you would build the part after the 'trials <-' line  into a 
while(){} loop , and you can easily improve upon 'setdiff( pop, trials )'.

HTH,

Chuck


>
> For example:
>
> pop<-c(1,5,14,7,9,12,18,19,65,54)
>
>
> sample(pop, 2) = lets say, (5,54)
> ## This is where I would like values (5, 54) to be removed from the
> population vector, giving a new "current" population vector:
>
>
> "new" pop = [1,14,7,9,12,18,19,65]
> and has length 8 instead of 10.
>
> In the cases when the size of pop and deriven sample of it is enough large
> using the following command is not helpful.
> newpop<-pop[-c(2,10)]
>
> One could simplify my question in this way: how we can exclude a sub vector
> values from a super  vector value (i.e sub vecor values are subset of super
> vector values).
> Thanks in advance.
> Hamid
>
> 	[[alternative HTML version deleted]]
>
> ______________________________________________
> R-help at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.
>

Charles C. Berry                            (858) 534-2098
                                             Dept of Family/Preventive Medicine
E mailto:cberry at tajo.ucsd.edu	            UC San Diego
http://famprevmed.ucsd.edu/faculty/cberry/  La Jolla, San Diego 92093-0901



More information about the R-help mailing list