2016-11-26 3 views
1

Как я могу правильно проинструктировать команду plyr-типа для разрыва, если выполнено условие?R plyr и break

plyr::l_ply(1:10,function(x){ 
    print(x) 
    if(x > 5) break 
}) 

> Error in .fun(piece, ...) : no loop for break/next, jumping to top level 
+0

использовать вместо возвращения – rawr

+0

Неа. Не работает, в приведенном выше примере, использование возврата по-прежнему приводит к печати всех номеров от 1 до 10. Я хочу, чтобы весь процесс завершился, когда x> 5. Конечно, это тривиальный пример, представляющий другую проблему, над которой я работаю. –

+0

ой. то вы используете неправильную функцию – rawr

ответ

0

Я считаю, что return - это правильный путь; его просто нужно поместить правильно.

plyr::l_ply(1:10,function(x){ 
    if(x > 5){ 
    return() 
    } 
    else{ 
    print(x) 
    } 
}) 

Это дает:

[1] 1 
[1] 2 
[1] 3 
[1] 4 
[1] 5 
+0

Да, я знаю об этом, но он по-прежнему перебирает все элементы, что, если в списке говорилось, что 1: 1e6, целью взлома является сокращение цикла. –

+0

Я вижу. Итак, вы хотите найти первое число, которое нарушает ваш порог и печатает весь номер до тех пор? – Chris

+0

Я хочу сломать, учитывая, что логическое условие может быть любым, выберите случайное число 'if (runif (1)> 0.5)', это солнечная погода сегодня, помогает ли папа детям. Это не имеет значения для цели моего вопроса здесь: Моя настоящая проблема не такая. Мне просто нужно преждевременно отказаться от вызова plyr, учитывая удовлетворение логического состояния. –

Смежные вопросы