[R] A question on list and lapply

William Dunlap wdunlap at tibco.com
Fri Dec 14 22:59:00 CET 2012


Yes, my example should have either applied lapply to
     structure(seq_along(bases), names=names(bases))
instead of just
     seq_along(bases)
or added the names(bases) to the ouput of lapply  (assuming
one wanted the names of 'bases' on the output).

Bill Dunlap
Spotfire, TIBCO Software
wdunlap tibco.com


> -----Original Message-----
> From: arun [mailto:smartpink111 at yahoo.com]
> Sent: Friday, December 14, 2012 1:37 PM
> To: William Dunlap
> Cc: R help
> Subject: Re: [R] A question on list and lapply
> 
> HI,
> 
> By applying:
> bases
> #$O
> #[1] "Oak Harbor"
> 
> #$P
> #[1] "Pensicola"
> #
> #$Q
> #[1] "Quonset Point"
> 
> res2<- lapply(bases,function(x) {if(names(bases)[match.call()[[2]][[3]]]%in% "P")
> tolower(x) else paste0("(",x,")")})
> res2
> #$O
> #[1] "(Oak Harbor)"
> #
> #$P
> #[1] "pensicola"
> #
> #$Q
> #[1] "(Quonset Point)"
> #the names of the list elements are not lost unless, it is named again.
> 
> 
> res1<-lapply(seq_along(bases), function(i){ base <- bases[i] ; if (names(base) != "P")
> paste0("(",base,")") else tolower(base) } )
> names(res1)
> #NULL
>  names(res2)
> #[1] "O" "P" "Q"
> A.K.
> 
> 
> 
> ----- Original Message -----
> From: William Dunlap <wdunlap at tibco.com>
> To: arun <smartpink111 at yahoo.com>; Christofer Bogaso
> <bogaso.christofer at gmail.com>
> Cc: R help <r-help at r-project.org>
> Sent: Friday, December 14, 2012 3:59 PM
> Subject: RE: [R] A question on list and lapply
> 
> > lapply(lapply(Dat,My_Function),function(x) {if(names(Dat)[match.call()[[2]][[3]]]%in%
> > "P") NULL else x})
> 
> match.call()[[2]][[3]], gack!
> 
> In lapply(X, FUN), FUN is applied to X[[i]], which has lost the names attribute that X
> may have had.  X[i] retains a part of the names attribute (since it is a sublist of X, not an
> element
> of X).  Hence FUN can look at the name associated with X[i] with code like the following:
>      lapply(seq_along(X), FUN=function(i) { Xi <- X[i] ; names(Xi) })
> 
> E.g., to apply one sort of processing to elements named "P" and another sort to those
> not named "P" you can do:
>   > bases <- list(O="Oak Harbor",P="Pensicola",Q="Quonset Point")
>   > lapply(seq_along(bases), function(i){ base <- bases[i] ; if (names(base) != "P")
> paste0("(",base,")") else tolower(base) } )
>   [[1]]
>   [1] "(Oak Harbor)"
> 
>   [[2]]
>   [1] "pensicola"
> 
>   [[3]]
>   [1] "(Quonset Point)"
> 
> Bill Dunlap
> Spotfire, TIBCO Software
> wdunlap tibco.com
> 
> 
> > -----Original Message-----
> > From: r-help-bounces at r-project.org [mailto:r-help-bounces at r-project.org] On Behalf
> > Of arun
> > Sent: Friday, December 14, 2012 12:11 PM
> > To: Christofer Bogaso
> > Cc: R help
> > Subject: Re: [R] A question on list and lapply
> >
> > Hi,
> >
> > If you want the list element "P" to be present as NULL in the result
> > you could use this:
> > set.seed(51)
> > lapply(lapply(Dat,My_Function),function(x) {if(names(Dat)[match.call()[[2]][[3]]]%in%
> > "P") NULL else x})
> > A.K.
> >
> >
> >
> >
> > ----- Original Message -----
> > From: Christofer Bogaso <bogaso.christofer at gmail.com>
> > To: r-help at r-project.org
> > Cc:
> > Sent: Friday, December 14, 2012 1:58 PM
> > Subject: [R] A question on list and lapply
> >
> > Dear all, let say I have following list:
> >
> > Dat <- vector("list", length = 26)
> > names(Dat) <- LETTERS
> > My_Function <- function(x) return(rnorm(5))
> > Dat1 <- lapply(Dat, My_Function)
> >
> >
> > However I want to apply my function 'My_Function' for all elements of 'Dat' except the
> > elements having 'names(Dat) == "P"'. Here I have specified the name "P" just for
> > illustration however this will be some name specified by user.
> >
> > Is there any direct way to achieve this, using 'lapply'?
> >
> > Thanks for your help.
> >
> > ______________________________________________
> > 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