[R] sampling vectors

Daniel Nordlund res90sx5 at verizon.net
Tue Oct 4 18:02:58 CEST 2005


> -----Original Message-----
> From: r-help-bounces at stat.math.ethz.ch [mailto:r-help-bounces at stat.math.ethz.ch]
> On Behalf Of ecatchpole
> Sent: Monday, October 03, 2005 11:57 PM
> To: Eric Pante
> Cc: r-help at stat.math.ethz.ch
> Subject: Re: [R] sampling vectors
> 
> Eric,
> 
> If you want samples of size 3 from 0:50, with sum==50, this seems to do
> the job (with apologies to those who really know how to program in R):
> 
> tot <- 50
> ii <- 0
> aa <- list()
> for(i in 0:tot){
>     for(j in 0:(tot-i)){
>        k <- tot-i-j
>        ii <- ii+1
>        aa[[ii]] <- list(i=i,j=j,k=k)
>     }
> }
> 
> aa[sample(ii, 4)] # for a sample of 4.
> 
> If you want a sample of size n from x[1],...x[N], such that the sample
> sum is T, then that is much trickier!
> 
> Ted.
> 
> On 04/10/05 07:31,  Eric Pante wrote,:
> > Hello Listers,
> >
> > I am trying to sample a vector to create a new one of sample length,
> > witha  sum equal to the sum of the initial vector:
> >
> > initial = 10, 30, 10 (sum=50)
> > sample example = 5, 35, 10 (sum=50) or 25, 15, 10  (sum=50), etc ...
> >
> > My problem is to control the sum, so it stays constant.
> > Any suggestions would be very helpful !
> >
> > Thank you in advance,
> > Eric
> >

Eric,

Here is another solution, which allows vectors of different lengths and sums.

vectorSample <- function(vec) {
  tot<-sum(vec)
  Len<-length(vec)
  v < -rep(0,Len)
  for(i in Len:2) {
    UL <- tot - sum(v) - i + 1
    v[i]<-sample(1:UL,1)
    } 
  v[1] <- tot - sum(v)
  v
  }

 vectorSample( c(10,30,10) )

Hope this helps,

Dan Nordlund
Bothell, WA




More information about the R-help mailing list