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

时间:2014-07-31 15:44:26

标签: r if-statement

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

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

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

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

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

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

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

1 个答案:

答案 0 :(得分: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)))

但如果我尝试51,我会收到错误

Error in parse(text = x) : contextstack overflow at line 1

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

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

  

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

@Spacedman在R源代码中找到了where this limit is defined

#define CONTEXTSTACK_SIZE 50