全局变量

时间:2017-04-19 14:39:10

标签: r

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

第一版:

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

第二版:

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

我想知道哪个版本是正确的或推荐的。

1 个答案:

答案 0 :(得分:2)

由于各种原因(可以在标题encapsulation下大致分组),因此依赖全局状态内部函数是不受欢迎的。因此,在大多数情况下,第二个版本会更优越。

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

经典的例子是这样的:

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

这两个函数add5add_pi都在一个单独的环境中访问函数本身之外的变量value_to_add。重要的是要认识到这些不同的环境彼此:add5的{​​{1}}在不同的环境中是value_to_add'的不同值s add_pi

value_to_add

> environment(add5)$value_to_add [1] 5 > environment(add_pi)$value_to_add [1] 3.141593 允许您检查函数environment(f)所属的环境。f用于访问该环境中的名称。)