我刚刚在课堂上学到了R使用词法范围,并在我的计算机上的R Studio中测试了它,我得到了适合动态范围的结果,而不是词法?不是不应该发生在R?我跑了:
y <- 10
f <- function(x) {
y <- 2
y^3
}
f(3)
并且f(3)出来是4(2 ^ 3)而不是100(10 ^ 3),即使我的班级提出了这张幻灯片:http://puu.sh/pStxA/0545079dbe.png。这不是动态范围吗?我可能只是看着这个错误,但在某个菜单上有一个模式,你可以将范围转换为词汇,或者发生了什么?
答案 0 :(得分:0)
您的代码已在函数本身中指定了y,该函数在全局环境中的y之前查找。
从这篇优秀的文章(http://www.r-bloggers.com/environments-in-r/):&#34;当评估一个函数时,R在一系列环境中查找范围内的任何变量。首先是评估环境,然后是函数的封闭环境,它将是工作空间中定义的函数的全局环境。&#34;
用特定于您案例的简单语言:当您调用变量&#34; y&#34;时,R会查找&#34; y&#34;在函数的环境中,如果找不到,那么它将进入你的工作区。举例说明:
y <- 10
f <- function(x) {
y^3
}
f(3)
会产生输出:
> f(3)
[1] 1000