我编写了一个使用75(!!!)嵌套ifelse语句的代码。
我知道它可能是我写的最低效的代码,但是当我尝试运行它时,我收到了以下错误:
>Error: unexpected ')' in:
" ifelse(basic$SEMType=="ppc" &
(grepl("Wellpoint Prospecting",basic$CategoryName)), "Wellpoint Prospecting","other"
)))))))))))))))))))))))))))))))))))))"
我检查并加倍检查")"的数量。它的正确性和ifelse关闭。
我还试图通过块运行嵌套的ifelse,一次运行15个(有时候是更大的块)并且它有效,所以我认为语法错误的可能性很低。
有没有人遇到过这样的限制?
我现在首先运行代码块内部ifelse并记录结果并向上移动通道。到目前为止,这似乎有效。
答案 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