R中的调用函数是什么?

use*_*r13 2 environment r

评估函数参数的最重要的事情之一是提供的参数和默认参数的处理方式不同.在函数的评估框架中计算提供的函数参数.函数的默认参数在函数的求值框架中计算.

我不太明白调用函数是什么意思.它是被调用的函数(比如在具有命名的函数的交互式sesion中为您指定了类型名称并按Enter键).如果是,callinig函数的评估框架与函数的评估框架有何不同?

G. *_*eck 5

首先改为标准术语.函数定义中使用的参数形式参数,并且在调用函数时传递给函数的参数实际参数.(问题中引用的段落是指当使用非标准术语时提供的参数.)

通过示例考虑两种情况.

情况1

下面f有正式的参数x,f在最后一行代码中调用的时候没有实际的参数.

现在,当f在最后一行代码中调用时,x获取值2,因为x在使用它之前没有设置它,并且在使用它时它a在函数中被查找,它具有值2,而不是在它具有值1的调用者中.

a <- 1
f <- function(x = a) {
   a <- 2
   x
}
f()
## [1] 2
Run Code Online (Sandbox Code Playgroud)

案例2

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

b <- 1
g <- function(x) { b <- 2; x + b }
g(b)
## [1] 3
Run Code Online (Sandbox Code Playgroud)

其他

虽然这涵盖了引用说明中的两种情况,但存在另一种情况,即x在函数中引用但在函数中未定义时发生的情况.在下面的代码中a是一个自由变量,g因为a它不是参数或以其他方式定义g.在这种情况下,当调用gg(等于g)时,R会尝试a在函数中查找g并失败,但它看起来的下一个地方不是调用者(其中a是1),而是定义函数的环境,即环境所在的环境.单词function出现,a在那个环境中是2.

 a <- 1
 f <- function() {
        a <- 2
        g <- function() a
 }
 gg <- f()
 gg()
 ## [1] 2
Run Code Online (Sandbox Code Playgroud)

这被称为词法范围,因为只需查看函数定义就可以知道自由变量的查找位置.