[R] Assignments inside lapply

ONKELINX, Thierry Thierry.ONKELINX at inbo.be
Wed Apr 27 12:35:56 CEST 2011


Here is a solution with lapply

PowerMatrix <- matrix(unlist(lapply(seq_len(dimx*dimy), function(x){
	i <- 1 + (x - 1) %% dimx
	j <- 1 + (x - 1) %/% dimy
	Pr(c(i,j),c(PRX,PRY),f)
})), nrow = dimx)

A reproducible example

dimx <- 5
dimy <- 6
PowerMatrix <- matrix(unlist(lapply(seq_len(dimx*dimy), function(x){
	i <- 1 + (x - 1) %% dimx
	j <- 1 + (x - 1) %/% dimy
	i * 10 + j
})), nrow = dimx)

Best regards,

Thierry

----------------------------------------------------------------------------
ir. Thierry Onkelinx
Instituut voor natuur- en bosonderzoek
team Biometrie & Kwaliteitszorg
Gaverstraat 4
9500 Geraardsbergen
Belgium

Research Institute for Nature and Forest
team Biometrics & Quality Assurance
Gaverstraat 4
9500 Geraardsbergen
Belgium

tel. + 32 54/436 185
Thierry.Onkelinx op inbo.be
www.inbo.be

To call in the statistician after the experiment is done may be no more than asking him to perform a post-mortem examination: he may be able to say what the experiment died of.
~ Sir Ronald Aylmer Fisher

The plural of anecdote is not data.
~ Roger Brinner

The combination of some data and an aching desire for an answer does not ensure that a reasonable answer can be extracted from a given body of data.
~ John Tukey
  

> -----Oorspronkelijk bericht-----
> Van: Alaios [mailto:alaios op yahoo.com] 
> Verzonden: woensdag 27 april 2011 12:14
> Aan: R-help op r-project.org; ONKELINX, Thierry
> Onderwerp: RE: [R] Assignments inside lapply
> 
> I would like to use lapply as there is a parallel version of 
> lapply called mclapply.
> 
> My purpose is to convert
> for (i in c(1:dimx)){
>    for (j in c(1:dimy)){
>        Powermap[i,j] <- Pr(c(i,j),c(PRX,PRY),f)  }}
> 
> to something that can run in parallel with mclapply:
> I am not sure then how to store the results of 
> lapply(mclapply) correctly to Powermap matrix. That is the 
> reason I put the assignment inside the return statement.
> For example this does not do what I want to
> Powermap[i,j]<-unlist(mclapply(1:nrow(ij),function(rowId) { 
> return (Pr(c(ij$i[rowId],ij$j[rowId]),c(PRX,PRY),f)
> How can I try this out?
> 
> Best Regards
> Alex
> 
> --- On Wed, 4/27/11, ONKELINX, Thierry 
> <Thierry.ONKELINX op inbo.be> wrote:
> 
> > From: ONKELINX, Thierry <Thierry.ONKELINX op inbo.be>
> > Subject: RE: [R] Assignments inside lapply
> > To: "Alaios" <alaios op yahoo.com>, "R-help op r-project.org" 
> > <R-help op r-project.org>
> > Date: Wednesday, April 27, 2011, 11:06 AM Dear Alex,
> > 
> > I think you want to use apply()
> > 
> > ij <- expand.grid(i = seq_len(dimx),j = seq_len(dimy)) Powermap <-
> > apply(ij, 1, function(x){
> >     Pr(x, c(PRX, PRY), f)
> > })
> > 
> > Best regards,
> > 
> > Thierry
> > 
> > 
> ----------------------------------------------------------------------
> > ------
> > ir. Thierry Onkelinx
> > Instituut voor natuur- en bosonderzoek team Biometrie & 
> Kwaliteitszorg 
> > Gaverstraat 4 9500 Geraardsbergen Belgium
> > 
> > Research Institute for Nature and Forest team Biometrics & Quality 
> > Assurance Gaverstraat 4 9500 Geraardsbergen Belgium
> > 
> > tel. + 32 54/436 185
> > Thierry.Onkelinx op inbo.be
> > www.inbo.be
> > 
> > To call in the statistician after the experiment is done may be no 
> > more than asking him to perform a post-mortem
> > examination: he may be able to say what the experiment died of.
> > ~ Sir Ronald Aylmer Fisher
> > 
> > The plural of anecdote is not data.
> > ~ Roger Brinner
> > 
> > The combination of some data and an aching desire for an 
> answer does 
> > not ensure that a reasonable answer can be extracted from a 
> given body 
> > of data.
> > ~ John Tukey
> >   
> > 
> > > -----Oorspronkelijk bericht-----
> > > Van: r-help-bounces op r-project.org
> > 
> > > [mailto:r-help-bounces op r-project.org]
> > Namens Alaios
> > > Verzonden: woensdag 27 april 2011 11:37
> > > Aan: R-help op r-project.org
> > > Onderwerp: [R] Assignments inside lapply
> > > 
> > > Dear all I would like to ask you if an assignment can
> > be done
> > > inside a lapply statement.
> > > 
> > > For example
> > > 
> > > I would like to covert a double nested for loop
> > > 
> > > for (i in c(1:dimx)){
> > >   for (j in c(1:dimy)){
> > >       Powermap[i,j] <-
> > Pr(c(i,j),c(PRX,PRY),f)
> > >    }
> > > }
> > > 
> > > to something like that:
> > > 
> > > 
> > > ij<-expand.grid(i=seq(1:dimx),j=(1:dimy))
> > > 
> > > unlist(lapply(1:nrow(ij),function(rowId) { return
> > >
> > (Powermap[i,j]<-Pr(c(ij$i[rowId],ij$j[rowId]),c(PRX,PRY),f))   }))
> > > 
> > > 
> > > as you can see lapply does not return nothing as the 
> assignment is 
> > > done inside the function. Would that
> > work
> > > correctly? What are the cases such a statement will
> > misfunction?
> > > 
> > > I would like to thank you in advace for your help.
> > > 
> > > Best Regards
> > > Alex
> > > 
> > > ______________________________________________
> > > R-help op 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