Some sort of `lapply` function returning a named `list`

Is there a way to give the list which is return from lapply names within the function or is it only possible afterwards?

base function: lapply(1:2, function(x) x^2)

Wrapper function:

lapply2 <- function(X, FUN, names, ...) {
  xxx <- lapply(X, FUN, ...)
  names(xxx) <- names
lapply2(1:2, function(x) x^2, c("a", "b"))

This wrapper function works, but somehow I don't think this is the most elegant way.

1 Like

I found an old example of lapply which was apparantly written in R and not in C.

la1 <- function(X, FUN, ...) {
    FUN <-
    if (!is.list(X))
	X <- as.list(X)
    rval <- vector("list", length(X))
    for(i in seq(along = X))
	rval[i] <- list(FUN(X[[i]], ...))
    names(rval) <- names(X)		  # keep `names' !

Thus, even if a package or function exists, you can't get better than following

lapply2 <- function (X, FUN, ...)  {
  names <- names(X)
  FUN <-
  if (!is.vector(X) || is.object(X)) {
    X <- as.list(X)
  names(X) <- names
  .Internal(lapply(X, FUN))

It would be nice though to know why the names were dropped in the first place.

This topic was automatically closed 7 days after the last reply. New replies are no longer allowed.