我有一个关于在R中使用全局变量的问题。我写了两个例子
第一版:
a <- 1
fun <- function(b){
return(a+b)
}
fun(b)
第二版:
a <- 1
fun <- function(a,b){
return(a+b)
}
fun(a,b)
我想知道哪个版本是正确的或推荐的。
答案 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
这两个函数add5
和add_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
用于访问该环境中的名称。)