[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

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

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:


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:

DEBUG/push/before[1] FALSE
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:

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

Best regards,

	[[alternative HTML version deleted]]

More information about the R-help mailing list