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
}