R:如果函数内不存在,则不要在函数外寻找变量
R: Not to look for variables outside a function if they do not exist within it
这个函数在R中是可以的:
f <- function(x) {
x + y
}
因为如果变量y
没有在函数f()
内部定义,R会在外部函数的环境中寻找它,在它的parent环境。
除了这种行为可能是错误生成器这一事实之外,具有输入参数的函数还有什么意义?无论如何,函数内的所有变量都可以在函数外搜索。
如果函数内不存在变量,有没有办法不在函数外寻找变量?
我想到的一些使用参数的原因:
- 没有参数,用户必须在使用函数之前定义变量,并且这些变量名需要与函数中使用的变量名相匹配——这是不切实际的。
- 有人应该如何 know/remember 函数中变量的名称?我如何知道函数内的哪些变量是纯局部变量,哪些变量必须存在于函数外部?
- 输入参数可以直接作为值传递,也可以作为变量传递(变量名无所谓)。
- 输入参数传达函数的预期用途;很清楚需要什么数据来操作它(或者至少:函数的用户需要插入多少个值)
- 可以使用 Rd 文件(或 roxygen 语法)正确记录输入参数
我相信还有很多其他原因需要使用输入参数。
米。 Papenberg 提供了很好的解释。
这是一个快速附录,说明如何使函数不在父环境中查找对象:
只需在参数列表中提供即可!这听起来可能很愚蠢,但除非您有充分的理由不这样做,否则您应该始终这样做。在您的示例中,只有 x
被传递给函数。因此,如果这里的想法是如果 y 不存在则应返回 x,则可以使用默认参数。在这种情况下,可以这样做
f <- function(x, y = 0) {
x + y
}
这个函数在R中是可以的:
f <- function(x) {
x + y
}
因为如果变量y
没有在函数f()
内部定义,R会在外部函数的环境中寻找它,在它的parent环境。
除了这种行为可能是错误生成器这一事实之外,具有输入参数的函数还有什么意义?无论如何,函数内的所有变量都可以在函数外搜索。
如果函数内不存在变量,有没有办法不在函数外寻找变量?
我想到的一些使用参数的原因:
- 没有参数,用户必须在使用函数之前定义变量,并且这些变量名需要与函数中使用的变量名相匹配——这是不切实际的。
- 有人应该如何 know/remember 函数中变量的名称?我如何知道函数内的哪些变量是纯局部变量,哪些变量必须存在于函数外部?
- 输入参数可以直接作为值传递,也可以作为变量传递(变量名无所谓)。
- 输入参数传达函数的预期用途;很清楚需要什么数据来操作它(或者至少:函数的用户需要插入多少个值)
- 可以使用 Rd 文件(或 roxygen 语法)正确记录输入参数
我相信还有很多其他原因需要使用输入参数。
米。 Papenberg 提供了很好的解释。
这是一个快速附录,说明如何使函数不在父环境中查找对象:
只需在参数列表中提供即可!这听起来可能很愚蠢,但除非您有充分的理由不这样做,否则您应该始终这样做。在您的示例中,只有 x
被传递给函数。因此,如果这里的想法是如果 y 不存在则应返回 x,则可以使用默认参数。在这种情况下,可以这样做
f <- function(x, y = 0) {
x + y
}