[R] Loop avoidance in simulating a vector

Christos Hatzis christos.hatzis at nuverabio.com
Thu Oct 16 22:29:48 CEST 2008


Yes, but the difference is that the looping in mapply is done in C.
There are no interpreted loops in mapply,as far as I can see.

-Christos 

> -----Original Message-----
> From: Bert Gunter [mailto:gunter.berton at gene.com] 
> Sent: Thursday, October 16, 2008 4:13 PM
> To: christos.hatzis at nuverabio.com; 'David Afshartous'; 
> r-help at r-project.org
> Subject: RE: [R] Loop avoidance in simulating a vector
> 
> mapply is still a (disguised) loop (at the interpreted 
> level). So other than improving code readability (always a 
> good thing!), it shouldn't make much of an efficiency difference.
> 
> A longer answer is: if all you're doing is a location-scale 
> family of distributions, then creating a matrix of standard 
> normal (or whatever) distributed data for all 1:N at once and 
> then using matrix operations to multiply and add, say, so 
> each column becomes your different distribution might be 
> faster. This gets the loops down to C code.
> 
> A shorter answer is: it's unlikely that any of this makes 
> enough of a difference to be worth the effort. Random number 
> generation is so efficient in R that "avoiding loops" rarely matters.
> 
> Also see ?replicate for a way to perhaps write cleaner code 
> (but still using hidden interpreted loops).
> 
> -- Bert Gunter
> 
> -----Original Message-----
> From: r-help-bounces at r-project.org 
> [mailto:r-help-bounces at r-project.org] On Behalf Of Christos Hatzis
> Sent: Thursday, October 16, 2008 1:06 PM
> To: 'David Afshartous'; r-help at r-project.org
> Subject: Re: [R] Loop avoidance in simulating a vector
> 
> Have a look at mapply.
> 
> -Christos 
> 
> > -----Original Message-----
> > From: r-help-bounces at r-project.org
> > [mailto:r-help-bounces at r-project.org] On Behalf Of David Afshartous
> > Sent: Thursday, October 16, 2008 3:47 PM
> > To: r-help at r-project.org
> > Subject: [R] Loop avoidance in simulating a vector
> > 
> > 
> > 
> > All,
> > 
> > I'd like to simulate a vector that is formed from many distinct 
> > distributions and avoid a loop if possible.  E.g, consider:
> > 
> > mu = c(1, 2, 3)
> > sigma = c(1, 2, 3)
> > n = c(10, 10, 10)
> > 
> > And we simulate a vector of length 30 that consists of N(mu[i], 
> > sigma[i])
> > distributed data, each of length n[i].   Of course for just 
> > three groups we
> > can simply write it out as:
> > 
> > DV = c(rnorm(n[1], mu[1], sigma[1]), rnorm(n[2], mu[2], sigma[2]), 
> > rnorm(n[3], mu[3], sigma[3]) )
> > 
> > For many groups we can use a loop (assuming equal numbers 
> per group):
> > 
> > n = n[1]
> > DV = numeric(N*n)
> > for (i in 1:N) {
> >     DV[(n*i - (n-1)): (n*i)] = rnorm(n, mu[i], sigma[i])
> >     }
> > 
> > Is there any way to do the general cas without using a loop?
> > 
> > Cheers,
> > David
> > 
> > ______________________________________________
> > 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.
> > 
> >
> 
> ______________________________________________
> 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.
> 
> 
>



More information about the R-help mailing list