I just ran into something odd, which hopefully someone here can shed some light on. Basically, when a function has an argument whose default value is the argument's name, strange things happen (well, strange to me anyway).
For example:
y <- 5
f <- function(x=y) x^2
f2 <- function(y=y) y^2
I would consider f
and f2
to be equivalent; although they use different variable names internally, they should both pick up the y
object in the global environment to use as the default. However:
> f()
[1] 25
> f2()
Error in y^2 : 'y' is missing
Not sure why that is happening.
Just to make things even more interesting:
f3 <- function(y=y) y$foo
> f3()
Error in f3() :
promise already under evaluation: recursive default argument reference or earlier problems?
I expected f3 to throw an error, but not that one!
This was tested on R 2.11.1, 2.12.2, and 2.14, on 32-bit Windows XP SP3. Only the standard packages loaded.
See Question&Answers more detail:
os 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…