On 11/3/08, [EMAIL PROTECTED] <[EMAIL PROTECTED]> wrote: > my problem is more complex than below but I think below can suffice. i have > a list and the name of it at the top level is GGG. so, if i do an lapply > and operate on lower components in the sublist, then I can do as shown in > EXAMPLE 1 and what will come back will be named GGG at the top level. > > but, suppose that , the function inside the lapply function was more > complex and i wanted to actually use "GGG" in the function but also return > it at the top level. I can't figure a way to do both things: > > A) return the name GGG from the lapply > > and > > B) use the name GGG in the function that is called inside the lapply ? > > Thanks for any suggestions on doing both ? I always think that I understand > lists and then I always end up finding a new problem that i hadn't seen > before. > > > # EXAMPLE ONE > > dummylist <- list(list(x=1,y=2,z=3)) > names(dummylist) <- "GGG" > print(dummylist) > print(str(dummylist)) > > # THIS RETURNS THE NAME GGG AT THE TOP LEVEL > one <- lapply(dummylist, function(.sublist) { > lapply(1:3, function(.index) { # could use a for loop here or > whatever. it doesn't matter > .sublist[[.index]] + 2 > }) > }) > > print(one) > print(str(one)) > print(names(one)) > > # EXAMPLE TWO > > # THIS LETS ME USE THE NAME BUT THEN IT DOESN"T GET RETURNED > two <- lapply(1:length(dummylist[[1]]),function(.index) { > temp <- dummylist[[1]][[.index]] + 2 > names(temp) <- names(dummylist) # DUMB USAGE JUST TO SHOW > USAGE > temp > })
Why not add names(two) <- names(dummylist) after this step? You cannot really expect lapply to magically figure out that it should take the names of the result from what is an essentially arbitrary object in the context of the lapply call. If you are happy with your first approach as long as you have the top-level name available inside your function, you could pass that as an extra argument: one <- lapply(dummylist, function(.sublist, .name) { lapply(1:3, function(.index) { temp <- .sublist[[.index]] + 2 names(temp) <- .name temp }) }, .name = names(dummylist)) -Deepayan ______________________________________________ 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.