-----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.