[Rd] Margins on tables

Duncan Murdoch dmurdoch at pair.com
Wed Mar 3 05:09:53 MET 2004

On Tue, 2 Mar 2004 16:56:58 +0100, you wrote:

>I wanted to do this, but in R when you have a single object as argument
>you can
>retrieve its name by the deparse(substitute())-trick, but if the
>function is just
>given as part of a list element there is no way (thai I know of) to get
>at its 
>name. You can of course do the deparse(substitute())-trick, and embark
>on major 
>text-processing to get you the name.

I was just thinking of the first case, where you had something like

margins(A, FUN=mean)

but I think you can handle the more complicated case using
substitute(FUN), i.e. and using this function, which recursively goes
through a list, and adds a name matching the value when the value is

add.names <- function(thelist) {
    n <- names(thelist)
    if (is.null(n)) n <- rep("", length(thelist))
    for (i in seq(along=thelist)[-1]) {
        if (!is.call(thelist[[i]])) {
            if (n[i] == "") n[i] <- as.character(thelist[[i]])
        } else if (as.character(thelist[[i]][[1]]) == "list") 
                thelist[[i]] <- add.names(thelist[[i]])
    names(thelist) <- n

I will add your function to the new "stats" package which is in the
base R distribution (the same package holding ftable).  I think it
would be better to name it "add.margins", since "margins" sounds like
a function to extract margins.  What do you think of that change?

Duncan Murdoch

More information about the R-devel mailing list