Я просто наткнулся на что-то странное, что, надеюсь, кто-то здесь сможет пролить немного света. По сути, когда функция имеет аргумент, значением по умолчанию которого является имя аргумента, происходят странные вещи (ну, в любом случае, странные для меня).
Например:
y <- 5
f <- function(x=y) x^2
f2 <- function(y=y) y^2
Я бы посчитал f
и f2
эквивалентными; хотя они используют разные имена переменных для внутреннего использования, им обоим следует выбрать объект y
в глобальной среде для использования по умолчанию. Тем не менее:
> f()
[1] 25
> f2()
Error in y^2 : 'y' is missing
Не уверен, почему это происходит.
Просто чтобы сделать вещи еще интереснее:
f3 <- function(y=y) y$foo
> f3()
Error in f3() :
promise already under evaluation: recursive default argument reference or earlier problems?
Я ожидал, что f3 выдаст ошибку, но не эту!
Это было протестировано на R 2.11.1, 2.12.2 и 2.14 на 32-битной Windows XP SP3. Загружены только стандартные пакеты.