[R] substitute "x" for "pattern" in a list, while preservign list "structure". lapply, gsub, list...?

Gabor Grothendieck ggrothendieck at gmail.com
Wed May 16 20:22:10 CEST 2007


Here is a recursive function you could try.  Here f has been defined only to
convert character variables.  Modify to suit.

recurse <- function(x, f) {
   if (length(x) == 0) return(x)
   if (is.list(x)) for(i in seq_along(x)) x[[i]] <- recurse(x[[i]], f)
   else x <- f(x)
   x
}
f <- function(x) if (mode(x) == "character") gsub("red", "green", x) else x
list4 <- recurse(list1, f)


On 5/16/07, new ruser <newruser at yahoo.com> wrote:
> I am experimenting with some of the common r functions.
> I had a question re:using "gsub" (or some similar functions) on the contents of a list.
>
> I want to design a function that looks at "everything" contained din a list, and anytime it finds the text string "pattern" replace it with "x".  I also wish to preserve the "structure" of the original list.  What is a good way to accomplish this?
>
> I tried :
>
> a = matrix(data=c(23,45,'red',78),nrow=2)
> b = c('red','green',1,2,3)
> d = data.frame( test1=c(223,445,'red',78,56) , test2= c('red',NA,NA,NA,NA) )
> e= list(a,b,d)
> list1 = list(a,b,d,e)
>
> list2 = lapply(list1,function(list)(gsub("red","green",list)))
>
> str(list1)
> str(list2)
>
> but the structue fo the list changed.
>
>
> ---------------------------------
> Give spam the boot. Take control with tough spam protection
>
>        [[alternative HTML version deleted]]
>
> ______________________________________________
> R-help at stat.math.ethz.ch 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