我有一个关于在R中使用全局变量的问题。我写了两个例子
第一个版本:
a <- 1
fun <- function(b){
return(a+b)
}
fun(b)第二个版本:
a <- 1
fun <- function(a,b){
return(a+b)
}
fun(a,b)我想知道哪个版本是正确的,还是推荐的。
发布于 2017-04-19 23:42:33
由于各种原因(可以在标题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的value_to_add与add_pi的value_to_add是不同的值。
> environment(add5)$value_to_add
[1] 5
> environment(add_pi)$value_to_add
[1] 3.141593(environment(f)允许您检查函数f所属的环境。$用于访问该环境中的名称。)
https://stackoverflow.com/questions/43498898
复制相似问题