Hi all,

I find myself sometimes in the situation where I lapply over a list and
in the particular function I'd like to use the name and or position of
the respective list item. What I usually do is to use mapply on the list
and the names of the list / a position list:

o <- list(A=1:3, B=1:2, C=1)
mapply(function (item, name) paste(name, sum(item), sep="="), o,
names(o))
mapply(function (item, pos) paste(pos, sum(item), sep="="), o,
seq_along(o))

[another way would be, of course, to use a for loop, but I'm slightly
reluctant to use for loops knowing that I definitely misuse lapply
sometimes]

Now I was wondering whether there is a better way of doing this? Or is
the mapply approach already the best way? In other words, is there any
possibility within lapply to get any information about the context of
the respective item?

To give you an example where this could be useful:

Imagine we have a dataframe and we want to replicate (more general apply
a function to) each column and the result should be a dataframe again,
where the new columns bear the name of their respective parent column
amended by some suffix. Using mapply I'd do something like:

d <- data.frame(A=1:3, B=2:4)
Reduce(cbind, mapply(function (col, nam) {
        td <- as.data.frame(do.call(cbind, rep(list(col), 3)))
        names(td) <- paste(nam, 1:3, sep = "_")
      td}, d, names(d), SIMPLIFY=FALSE))

Any suggestions? Or is it already the state of the art? Any help
appreciated.

BR Thorn

______________________________________________
R-help@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.

Reply via email to