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
但未在函数中定义时发生的情况。在下面的代码中,a
是 g
中的自由变量,因为 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
这称为词法作用域,因为只需查看函数定义就可以知道在哪里查找自由变量。
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
但未在函数中定义时发生的情况。在下面的代码中,a
是 g
中的自由变量,因为 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
这称为词法作用域,因为只需查看函数定义就可以知道在哪里查找自由变量。