Существует ли ограничение на возможное количество вложенных операторов ifelse
Я написал код, который использует 75 (!!!) вложенных операторов ifelse.
Я знаю его, вероятно, самый неэффективный код, который я мог бы написать, но когда я попытался запустить его, я получил следующую ошибку:
>Error: unexpected ')' in:
" ifelse(basic$SEMType=="ppc" &
(grepl("Wellpoint Prospecting",basic$CategoryName)), "Wellpoint Prospecting","other"
)))))))))))))))))))))))))))))))))))))"
Я проверил и удвоил проверил число ")". Его правильно, и ifelse закрывается.
Я также попытался запустить вложенный ifelse кусочками по 15 за раз (а иногда и большими кусками), и он работает, поэтому я решил, что вероятность синтаксической ошибки низкая.
Кто-нибудь сталкивался с такими ограничениями?
Теперь я сначала запустил фрагмент кода, а затем запустил внутренний файл ifelse и записывал результат и двигался вверх по каналу. Это пока работает.
Ответы
Ответ 1
Как минимум, с помощью этого метода я могу создать не более 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) : contextQaru at line 1
возможно, это специфично для синтаксического анализа. Кажется странным, что вы получите синтаксическую ошибку.
Благодаря ссылке, предоставленной @shadow, Брайан Рипли подтвердил это в ответе 2008 на вопрос r-help
В этом конкретном случае [переполнение контекста], он говорит, что у вас более 50 вложенных контексты анализа
И @Spacedman нашел где этот предел определен в исходном коде R
#define CONTEXTSTACK_SIZE 50