Skip to content
Prev 360066 / 398503 Next

formula argument evaluation

%=>% would have precendence ('order of operations') problems also.

   A + B %=>% C

is equivalent to

  A + ( B %=>% C)

and I don't think that is what you want.

as.list(quote(A + B %=>% C)) shows the first branch in the parse tree.  The
following function, str.language, shows the entire parse tree, as in

  > str.language(quote(A + B %=>% C))
  `quote(A + B %=>% C)` call(3): A + B %=>% C
    `` name(1): +
    `` name(1): A
    `` call(3): B %=>% C
      `` name(1): %=>%
      `` name(1): B
      `` name(1): C

str.language <-
function (object, ..., level = 0, name = myDeparse(substitute(object)))
{
    abbr <- function(string, maxlen = 25) {
        if (length(string) > 1 || nchar(string) > maxlen)
            paste(substring(string[1], 1, maxlen), "...", sep = "")
        else string
    }
    myDeparse <- function(object) {
        if (!is.environment(object)) {
            deparse(object)
        }
        else {
            ename <- environmentName(object)
            if (ename == "")
                ename <- "<unnamed env>"
            paste(sep = "", "<", ename, "> ", paste(collapse = " ",
                objects(object)))
        }
    }
    cat(rep("  ", level), sep = "")
    if (is.null(name))
        name <- ""
    cat(sprintf("`%s` %s(%d): %s\n", abbr(name), class(object),
        length(object), abbr(myDeparse(object))))
    a <- attributes(object)
    if (is.recursive(object) && !is.environment(object)) {
        object <- as.list(object)
        names <- names(object)
        for (i in seq_along(object)) {
            str.language(object[[i]], ..., level = level + 1,
                name = names[i])
        }
    }
    a$names <- NULL
    if (length(a) > 0) {
        str.language(a, level = level + 1, name = paste("Attributes of",
            abbr(name)))
    }
}



Bill Dunlap
TIBCO Software
wdunlap tibco.com
On Tue, Apr 12, 2016 at 11:59 PM, Adrian Du?a <dusa.adrian at unibuc.ro> wrote: