R
和C
都有词汇范围。因此,假设全局范围为空,在C
中,以下代码将不起作用:
int aux(int arg) {
if (arg > 0) {
int result = 1;
} else {
int result = 0;
}
return result;
}
在R
中使用以下代码:
aux <- function(arg) {
if (arg > 0) {
result = 1
} else {
result = 0
}
return(result)
}
正常工作。有人能告诉我R
和C
之间的范围有什么不同,这使得这两个函数的行为有所不同吗?
答案 0 :(得分:3)
在R中,if
条件之后的表达式在封闭环境中进行评估:
if (TRUE) environment()
#<environment: R_GlobalEnv>
(令人惊讶的是,我找不到有关此事的文件。)
您可以使用local
:
aux <- function(arg) {
if (arg > 0) {
local({result <- 1})
} else {
local({result <- 0})
}
return(result)
}
aux(1)
#Error in aux(1) : object 'result' not found