R 全局变量

R 全局变量,r,R,我有一个关于在R中使用全局变量的问题。我写了两个例子 第一版: a <- 1 fun <- function(b){ return(a+b) } fun(b) a依赖函数内部的全局状态是不受欢迎的,原因有很多(可以在标题下大致分组。因此,在大多数情况下,第二个版本会更好 但是,一旦在非全局环境中定义了变量,情况就会发生变化。在这种情况下,您已经将状态封装到了可以整齐放置的东西中。这有时很有用,因为它允许您基于某些输入创建函数 经典的例子是这样的: adder = funct

我有一个关于在R中使用全局变量的问题。我写了两个例子

第一版:

a <- 1
fun <- function(b){
    return(a+b)
}
fun(b)

a依赖函数内部的全局状态是不受欢迎的,原因有很多(可以在标题下大致分组。因此,在大多数情况下,第二个版本会更好

但是,一旦在非全局环境中定义了变量,情况就会发生变化。在这种情况下,您已经将状态封装到了可以整齐放置的东西中。这有时很有用,因为它允许您基于某些输入创建函数

经典的例子是这样的:

adder = function (value_to_add) {
    function (x) {
        x + value_to_add
    }
}
这可能看起来很模糊,但它只是一个返回另一个函数的函数:您可以使用它来创建函数。例如,在这里,我们创建一个函数,它接受一个参数并向其中添加值5:

add5 = adder(5)
这里有一个,在它的参数中加上π:

add_pi = adder(pi)
这两项都是正常功能:

> add5(10)
[1] 15
> add_pi(10)
[1] 13.14159
这两个函数,
add5
add\u pi
,都访问一个变量,
value\u to\u add
,该变量在函数本身之外,在一个单独的环境中。重要的是要认识到,这两个环境彼此不同:
add5
value\u to\u add
在di中是一个不同的值不同的环境,从
add\u pi
value\u到\u add

> environment(add5)$value_to_add
[1] 5
> environment(add_pi)$value_to_add
[1] 3.141593

environment(f)
允许您检查函数
f
所属的环境。
$
用于访问该环境中的名称。)

您说哪个版本正确是什么意思?它们都有效。定义“正确”。在第二个版本中,如果不提供
a
,则无法调用
fun
。因此该函数不使用全局
a
,而是计算
a+b
的第一个参数。使用全局
a
调用它是另一回事。通常,请尽量避免使用全局变量,并始终传递变量in函数参数,就像你的第二个版本一样。这不是“正确性”的问题,而是良好的实践,这有助于避免错误,使你的代码更可读,更容易更改,等等。哈德利的书中有一个关于函数和范围的很好的部分,明白了。THX!
> environment(add5)$value_to_add
[1] 5
> environment(add_pi)$value_to_add
[1] 3.141593