【发布时间】:2021-03-14 12:44:11
【问题描述】:
在过去的几周里,我一直在阅读 Hadley Wickham 的 Advanced R,其中一个特别的概念引起了我的注意,如果您能给我一个解释,我将不胜感激:
默认和用户的评估环境略有不同 提供的参数,因为默认参数在 功能。
本书提供了以下示例:
h05 <- function(x = ls()) {
a <- 1
x
}
# ls() evaluated inside h05:
h05()
#> [1] "a" "x"
# ls() evaluated in global environment:
h05(ls())
#> [1] "h05"
这里很清楚,当用户提供ls() 作为参数x 的值时,它是在全局环境中评估的。然而,在下面的示例中,当我们为 x 和 y 提供 2 个值时,它不会影响它们在全局环境中的值,尽管它们正在那里进行评估:
y <- 6
x <- 5
f1 <- function(x, y) {
x*2 + y
}
f1(x = 4, y = 12)
我想知道我在这里遗漏了什么,以及上述规则是否仅在我们根据函数调用中的其他参数定义和参数时才成立。
任何解释都非常感谢。
【问题讨论】:
-
这与stackoverflow.com/q/66623900/2554330的答案相同:函数中的
x和y是与全局环境中的x和y不同的变量。 -
在
f1(x = 4, y = 12)中,本书所讨论的值是4 和12。x和y是函数参数名称。 -
如果你使用了像
f1(x = (x <- 4), y = 12)这样奇怪的东西,两个x标记将代表不同的变量:第一个是成为局部变量的参数名称,第二个是表达式的一部分全局环境,因此会改变全局值。 -
是的,完全正确。
-
是的,有点。更准确地说,它是函数头中定义的变量。它是在函数体中可见的那个。
标签: r function default-arguments