如何在R中完成范围界定

时间:2016-05-02 11:59:42

标签: c r scope nested

RC都有词汇范围。因此,假设全局范围为空,在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)
 }

正常工作。有人能告诉我RC之间的范围有什么不同,这使得这两个函数的行为有所不同吗?

1 个答案:

答案 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