【1.4.1】全局变量和局部变量

R是如何知道给那个符号赋予哪个值的呢?例如:

> lm <- function(x) { x * x }
> lm
function(x) { x * x }

为什么lm列出来的是function(x) { x * x },而不是其他的捏?

       

当R开始给某个符号赋值的时候,它会从系列的环境中开始找对应的值,如下,他会从一个个环境中开始寻找,因为不同的时候赋值在不同的环境中,所以就可以找到。详略

> **search()**
[1] ".GlobalEnv" "package:stats" "package:graphics"
[4] "package:grDevices" "package:utils" "package:datasets"
[7] "package:methods" "Autoloads" "package:base"

library() #调用packages
> search() #这个时候环境就会发生改变。

例子:

make.power <- function(n) {
pow <- function(x) {
x^n
}
pow
}
This function returns another function as its value.
> cube <- make.power(3)
> square <- make.power(2)
> cube(3)
[1] 27
> square(3)
[1] 9


> ls(environment(cube))
[1] "n" "pow"
> get("n", environment(cube))
[1] 3
> ls(environment(square))
[1] "n" "pow"
> get("n", environment(square))
[1] 2

y <- 10
 f <- function(x) {
 y <- 2
 y^2 + g(x)
 }
 g <- function(x) {
 x * y
 }
 f(3)=?
 上面g(x)中的y=2
 > g <- function(x) {
 + a <- 3
 + x+ a + y
 + }
 > g(2)
 Error in g(2) : object "y" not found
 > y <- 3
 > g(2)
 [1] 8

参考资料:

Roger D. Peng的《Computing for Data Analysis》

ps:这个章节主要要讲明白的就是全局变量和局部变量的问题,你所用的值是来自于以前定义的,还是你现在定义的,以及为什么会是这样,过程及原理理解的不透彻,以后再好好补一下这方面的东西。

药企,独角兽,苏州。团队长期招人,感兴趣的都可以发邮件聊聊:tiehan@sina.cn
个人公众号,比较懒,很少更新,可以在上面提问题,如果回复不及时,可发邮件给我: tiehan@sina.cn