双方R并C有词法范围.因此,假设全局范围为空,在C以下代码中将不起作用:
int aux(int arg) {
if (arg > 0) {
int result = 1;
} else {
int result = 0;
}
return result;
}
Run Code Online (Sandbox Code Playgroud)
在R以下代码中:
aux <- function(arg) {
if (arg > 0) {
result = 1
} else {
result = 0
}
return(result)
}
Run Code Online (Sandbox Code Playgroud)
工作正常.有人能告诉我两者之间的范围有什么不同R,C哪些使得这两个函数的行为有所不同?
在 R 中,条件后的表达式if在封闭环境中计算:
if (TRUE) environment()
#<environment: R_GlobalEnv>
Run Code Online (Sandbox Code Playgroud)
(令人惊讶的是,我找不到与此相关的文档。)
您可以使用以下方法更改它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
Run Code Online (Sandbox Code Playgroud)