如何在R中完成范围界定

Mar*_*jko 5 c scope nested r

双方RC有词法范围.因此,假设全局范围为空,在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哪些使得这两个函数的行为有所不同?

Rol*_*and 3

在 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)