Hi list(...), I've narrowed down a weird bug. It's like a ghost in the machine, in that functions seem to remember things that they should not be able to. In the example below, the result of the second (and subseqent) calls depend on what was given in the first call.
foo <- function(given = NULL) { callObj <- quote(callFunc()) if (!is.null(given)) callObj$given <- given if (is.null(given)) callObj$default <- TRUE callObj } foo() # callFunc(default = TRUE) foo(given = TRUE) # callFunc(default = TRUE, given = TRUE) Note, if the first call was something different, the result is different: foo("blah blah") # callFunc(given = "blah blah") foo(given = TRUE) # callFunc(given = TRUE) foo() # callFunc(given = "blah blah", default = TRUE) So on subsequent calls, callObj is being initialised to its final value from the first call. You can actually see this here: body(foo)[[2]] # callObj <- quote(callFunc(given = "blah blah")) The problem seems to be related to quote(callFunc()), because if you replace it with call("callFunc"), everything works as expected: foo.ok <- function(given = NULL) { callObj <- call("callFunc") if (!is.null(given)) callObj$given <- given if (is.null(given)) callObj$default <- TRUE callObj } foo.ok() # callFunc(default = TRUE) foo.ok(given = TRUE) # callFunc(given = TRUE) > sessionInfo() R version 2.9.0 Under development (unstable) (2009-01-04 r47462) i386-pc-mingw32 locale: LC_COLLATE=English_Australia.1252;LC_CTYPE=English_Australia.1252;LC_MONETARY=English_Australia.1252;LC_NUMERIC=C;LC_TIME=English_Australia.1252 attached base packages: [1] stats graphics grDevices utils datasets methods base -- Felix Andrews / 安福立 http://www.neurofractal.org/felix/ 3358 543D AAC6 22C2 D336 80D9 360B 72DD 3E4C F5D8 ______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel