### =========================================================================
### unlist2(): A replacement for base::unlist() that does not mangle the
### names.
### -------------------------------------------------------------------------
make.name.tree <- function(x, recursive, what.names)
{
if (!is.character(what.names) || length(what.names) != 1)
stop("'what.names' must be a single string")
what.names <- match.arg(what.names, c("inherited" , "full"))
.make.name.tree.rec <- function(x, parent_name, depth)
{
if (length(x) == 0)
return(character(0))
x_names <- names(x)
if (is.null(x_names))
x_names <- rep.int(parent_name, length(x))
else if (what.names == "full")
x_names <- paste0(parent_name, x_names)
else
x_names[x_names == ""] <- parent_name
if (!is.list(x) || (!recursive && depth >= 1L))
return(x_names)
if (what.names == "full")
x_names <- paste0(x_names, ".")
lapply(seq_len(length(x)),
function(i) .make.name.tree.rec(x[[i]], x_names[i], depth + 1L))
}
.make.name.tree.rec(x, "", 0L)
}
unlist2 <- function(x, recursive=TRUE, use.names=TRUE, what.names="inherited")
{
ans <- unlist(x, recursive, FALSE)
if (!use.names)
return(ans)
if (!is.character(what.names) || length(what.names) != 1)
stop("'what.names' must be a single string")
what.names <- match.arg(what.names, c("inherited" , "full"))
names(ans) <- unlist(make.name.tree(x, recursive, what.names), recursive, FALSE)
ans
}
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.