【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
个人公众号,比较懒,很少更新,可以在上面提问题,如果回复不及时,可发邮件给我: tiehan@sina.cn