嵌套ifelse语句的可能数量是否有限制

Yev*_*ach 19 if-statement r

我编写了一个使用75(!!!)嵌套ifelse语句的代码.

我知道它可能是我写的最低效的代码,但当我尝试运行它时,我收到以下错误:

>Error: unexpected ')' in:
"                                 ifelse(basic$SEMType=="ppc" &
 (grepl("Wellpoint Prospecting",basic$CategoryName)), "Wellpoint Prospecting","other"
                                     )))))))))))))))))))))))))))))))))))))"
Run Code Online (Sandbox Code Playgroud)

我检查并加倍检查")"的数量.它的正确和ifelse关闭.

我还试图通过块运行嵌套的ifelse,一次运行15个(有时候更大的块)并且它可以工作,所以我认为语法错误的可能性很低.

有没有人遇到过这样的限制?

我现在首先运行代码块内部ifelse并记录结果并向上移动通道.到目前为止,这似乎有效.

MrF*_*ick 24

至少使用这种方法,我似乎能够创建最多50个嵌套级别

x<-"NA"
for(i in 1:50) {
    x<-paste0("ifelse(x==",i,",",i,",", x, ")")
}
x
eval(parse(text=x), list2env(list(x=21)))
Run Code Online (Sandbox Code Playgroud)

但如果我尝试51,我得到错误

Error in parse(text = x) : contextstack overflow at line 1
Run Code Online (Sandbox Code Playgroud)

所以也许这是特定的解析.你会得到一个语法错误似乎很奇怪.

感谢@shadow提供的链接,Brian Ripley在2008年对 r-help问题的回复中证实了这一点

在这个特殊情况下[ contextstack overflow ],它说你有超过50个嵌套的解析上下文

@Spacedman发现R源代码中定义这个限制

#define CONTEXTSTACK_SIZE 50
Run Code Online (Sandbox Code Playgroud)

  • 根据Brian Ripley(https://stat.ethz.ch/pipermail/r-help/2008-March/157341.html),您最多可以拥有50个嵌套的解析上下文. (3认同)
  • 如果放入文件中的函数def并且"sourced",则会出现相同的错误.即使在多行,并且超过51个嵌套,我在第51行得到错误. (2认同)
  • 这是在代码:https://github.com/wch/r-source/blob/c48b62e3b4dd43d939e21f4af87e877151f1840b/src/main/gram.y#L1158 (2认同)