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

发表评论

电子邮件地址不会被公开。 必填项已用*标注