R中的调用函数是什么?

时间:2018-02-17 22:47:40

标签: r environment

  

关于函数参数求值的最重要的一点是,提供的参数和默认参数的处理方式不同。在函数的评估框架中计算提供的函数参数。函数的默认参数在函数的求值框架中计算。

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

1 个答案:

答案 0 :(得分:5)

首先更改为标准术语。函数定义中使用的参数是形式参数,调用它时传递给函数的参数是实际参数。 (问题中的quoted passage是指使用非标准术语,提供的参数时的实际参数。)

通过示例考虑两种情况。

<案例1

f下方有正式参数x,并且在最后一行代码中调用f时,没有实际参数。

现在,在最后一行代码f中调用x时,获取值为2,因为x在使用之前和使用时a未设置a <- 1 f <- function(x = a) { a <- 2 x } f() ## [1] 2 在函数中查找它的值为2, not 在调用者中它的值为1.

x
<案例2

另一方面,在调用者中评估实际参数。在下面的代码的最后一行中,b设置为1,因为这是调用者中x的值。同样,b在使用之前不会被评估,但现在即使x在函数本身中已设置为2,这对x也没有影响。 b <- 1 g <- function(x) { b <- 2; x + b } g(b) ## [1] 3 设置为1,而不是2.

x

其他

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

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

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