R中的调用函数是什么?

What is the calling function in R?

One of the most important things to know about the evaluation of arguments to a function is that supplied arguments and default arguments are treated differently. The supplied arguments to a function are evaluated in the evaluation frame of the calling function. The default arguments to a function are evaluated in the evaluation frame of the function.

不太明白调用函数是什么意思。它是被调用的函数吗(比如在交互式会话中,函数已经命名为分配给你的类型名称并按回车键)。如果是,调用函数的评估框架与函数的评估框架有何不同?

第一次更改标准条款。函数定义中使用的参数是形式参数,调用函数时传递给函数的参数是实际参数。 (问题中的 quoted passage 在使用非标准术语提供的参数时指的是实际参数。)

通过示例考虑两种情况。

案例一

下面的 f 有形式参数 x,当在代码的最后一行调用 f 时没有实际参数。

现在,当在代码的最后一行调用 f 时,x 得到值 2,因为 x 直到被使用和被使用时才被设置 [=19] =] 在函数中查找它的值为 2, 而不是 在调用者中它的值为 1.

a <- 1
f <- function(x = a) {
   a <- 2
   x
}
f()
## [1] 2

案例二

另一方面,实际参数是在调用者中求值的。在下面的最后一行代码中,x 被设置为 1,因为这是调用者中 b 的值。同样,x 在使用之前不会被评估,但现在即使 b 在函数本身中已设置为 2,这对 x 没有影响。 x 设置为 1,而不是 2。

b <- 1
g <- function(x) { b <- 2; x + b }
g(b)
## [1] 3

其他

虽然这涵盖了引用中的两种情况,但请注意还有另一种情况,即在函数中引用 x 但未在函数中定义时发生的情况。在下面的代码中,ag 中的自由变量,因为 a 不是参数,也不是 g 中定义的。在这种情况下,当调用 gg(等于 g)时,R 会尝试在函数 g 中查找 a 并失败,但它查找的下一个位置是 不是调用者(其中a为1)而是定义函数的环境,即单词function所在的环境] 出现并且 a 在该环境中为 2。

 a <- 1
 f <- function() {
        a <- 2
        g <- function() a
 }
 gg <- f()
 gg()
 ## [1] 2

这称为词法作用域,因为只需查看函数定义就可以知道在哪里查找自由变量。