Я считаю, что вы на самом деле не понимаете семью apply
и ее цель.Вопреки общему мнению, они не эквивалент любого for
-петля.Можно сказать, что большинство for
-циклов эквивалентны apply
, но это другой вопрос.
Apply
делает именно то, что говорит: он последовательно применяет функцию к ряду похожих аргументови возвращает результат.Следовательно, по определению вы не можете выйти из заявки.Вы больше не работаете в глобальной среде, поэтому, в принципе, вы не можете хранить глобальные счетчики, проверять после каждого выполнения некоторые условия и адаптировать цикл.Вы можете получить доступ к глобальной среде и даже изменить переменные, используя assign
или <<-
, но это довольно опасно.
Чтобы понять разницу, не читайте apply(1:3,afunc)
как for(i in 1:3) afunc(i)
, а как
afunc(1)
afunc(2)
afunc(3)
в одном (блочном) утверждении.Это лучше отражает то, что вы делаете.Эквивалент break
в apply
просто не имеет смысла, так как это скорее блок кода, чем цикл.