[R] Lexical scoping/calling stack issue: R fails to recognize an argument's default value

Janko Thyson janko.thyson at gmail.com
Sat Nov 15 00:51:16 CET 2014


Dear list,

I just encountered a behavior that I've never seen before:

Is it possible, that certain argument names (lazy in my case) are
special/reserved and thus would lead to unexpected behavior when a calling
stack is involved that spreads across functions of three different
packages: optionr::setAnywhereOptions() calls nestr::setNested() calls
reactr::setShinyReactive()?

Or is there something I'm generally missing with respect the combination of
lexical scoping/the frame stack, S4 and default values of function
arguments.

Running the following code leads to a situation where the default value of
`lazy` in `reactr::setShinyReactive()` is not properly recognized while
others (e.g. `push`) are recognized just fine:

require("devtools")
devtools::install_github("Rappster/conditionr")
devtools::install_github("Rappster/nestr")
devtools::install_github("Rappster/optionr")
require("optionr")

container <- initializeOptionContainer(overwrite = TRUE)
expect_true(setAnywhereOption(id = "x_1", value = TRUE, reactive = TRUE))
expect_equal(getAnywhereOption(id = "x_1"), TRUE)
expect_true(res <- setAnywhereOption(id = "x_2",
  value = reactr::reactiveExpression(
    !getAnywhereOption(id = "x_1")
  ),
  reactive = TRUE))

The current version of `setShinyReactive()` contains a debugging section
that prints these status messages (the actual code:
https://github.com/Rappster/reactr/blob/bug-28/R/setShinyReactive.r#L196)

DEBUG/push/before[1] FALSE
DEBUG/lazy/before
Error in print(lazy) : argument is missing, with no default
DEBUG/is_lazy/before[1] FALSE
DEBUG/lazy/after[1] FALSE

It also contains my current workaround: also include an argument with
name `is_lazy` (whose default)
value is recognized again) and then run `lazy <- is_lazy`.

You can also find this information in this Stackoverflow post:
http://stackoverflow.com/questions/26940474/lexical-scoping-issue-r-fails-to-recognize-an-arguments-default-value

Thanks a lot for everyone that can shed some light on this!


Best regards,
Janko

	[[alternative HTML version deleted]]



More information about the R-help mailing list