Подтвердить что ты не робот

Существует ли ограничение на возможное количество вложенных операторов ifelse

Я написал код, который использует 75 (!!!) вложенных операторов ifelse.

Я знаю его, вероятно, самый неэффективный код, который я мог бы написать, но когда я попытался запустить его, я получил следующую ошибку:

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

Я проверил и удвоил проверил число ")". Его правильно, и ifelse закрывается.

Я также попытался запустить вложенный ifelse кусочками по 15 за раз (а иногда и большими кусками), и он работает, поэтому я решил, что вероятность синтаксической ошибки низкая.

Кто-нибудь сталкивался с такими ограничениями?

Теперь я сначала запустил фрагмент кода, а затем запустил внутренний файл ifelse и записывал результат и двигался вверх по каналу. Это пока работает.

4b9b3361

Ответ 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