R 中的形式参数评估和词法范围
Formal Arguments Evaluation and Lexical Scoping in R
我一直在阅读 Hadley Wickham 的 Advanced R,以便更好地了解机制或 R 及其背后的工作原理。到目前为止我很享受并且一切都很清楚,有一个问题占据了我的脑海,我还没有找到解释。
我非常熟悉 R 的范围规则,它决定了如何将值分配给自由变量,但是我一直在努力解决为什么 R 在第一种情况下无法通过词法范围找到形式参数的值的想法?考虑以下示例:
y <- 4
f1 <- function(x = 2, y) {
x*2 + y
}
f1(x = 3)
我通常会抛出错误,因为我没有为参数 y
分配默认值,但是如果我在函数体中创建局部变量 y
,它就不会抛出任何错误:
f1 <- function(x = 2, y) {
y <- 4
x*2 + y
}
f1(x = 3)
非常感谢您
您已经在 f1()
中定义了 y
,只是您还没有为它绑定一个值。全局环境中的y
是一个完全不同的变量。
您为函数指定了参数 y
,但在 return 中要求提供值时未提供任何值。所以这会起作用
f1(x = 3, y)
[1] 10
这里它将 y
您定义的变量作为第二个参数的输入,顺便说一句,它也被命名为 y 并且 returns 是一个值。
即使这样也行。因为你已经为这个函数定义了一个默认值
y1 <- 4
f1 <- function(x = 2, y= y1) {
x*2 + y
}
f1(x=3)
#> [1] 10
f1(x = 3, 5)
#> [1] 11
由 reprex package (v2.0.0)
于 2021-05-03 创建
如果您想在不为任何参数提供任何值的情况下评估任何函数,则必须在函数本身中定义它。
我一直在阅读 Hadley Wickham 的 Advanced R,以便更好地了解机制或 R 及其背后的工作原理。到目前为止我很享受并且一切都很清楚,有一个问题占据了我的脑海,我还没有找到解释。 我非常熟悉 R 的范围规则,它决定了如何将值分配给自由变量,但是我一直在努力解决为什么 R 在第一种情况下无法通过词法范围找到形式参数的值的想法?考虑以下示例:
y <- 4
f1 <- function(x = 2, y) {
x*2 + y
}
f1(x = 3)
我通常会抛出错误,因为我没有为参数 y
分配默认值,但是如果我在函数体中创建局部变量 y
,它就不会抛出任何错误:
f1 <- function(x = 2, y) {
y <- 4
x*2 + y
}
f1(x = 3)
非常感谢您
您已经在 f1()
中定义了 y
,只是您还没有为它绑定一个值。全局环境中的y
是一个完全不同的变量。
您为函数指定了参数 y
,但在 return 中要求提供值时未提供任何值。所以这会起作用
f1(x = 3, y)
[1] 10
这里它将 y
您定义的变量作为第二个参数的输入,顺便说一句,它也被命名为 y 并且 returns 是一个值。
即使这样也行。因为你已经为这个函数定义了一个默认值
y1 <- 4
f1 <- function(x = 2, y= y1) {
x*2 + y
}
f1(x=3)
#> [1] 10
f1(x = 3, 5)
#> [1] 11
由 reprex package (v2.0.0)
于 2021-05-03 创建如果您想在不为任何参数提供任何值的情况下评估任何函数,则必须在函数本身中定义它。