gpt4 book ai didi

r - R中的调用函数是什么?

转载 作者:行者123 更新时间:2023-12-04 21:54:59 25 4
gpt4 key购买 nike

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.

不太明白调用函数是什么意思。是否是被调用的函数(就像在交互式 session 中,已命名的函数已分配给您键入名称并按 Enter 键)。如果是,调用函数的评估框架与函数的评估框架有何不同?

最佳答案

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

通过示例考虑两种情况。

案例1

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

现在,当在代码的最后一行调用 f 时,x 得到值 2,因为 x 在使用之前并未设置,并且使用时,a 会在函数中查找其值为 2 的位置,不会在调用者中查找其值为 1 的位置。

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

案例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

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

关于r - R中的调用函数是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48846681/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com