2009-08-06 4 views
6

Понимая, что петли обычно не идеальны в R, иногда они необходимы.Должны ли «while loops» быть предпочтительными для «для циклов» для больших, необходимых петель в R?

При написании больших циклов, не

for (i in 1:large_number) 

памяти отходов, так как должен быть создан вектор размера large_number?

Будет ли это делать в то время как петли лучший выбор для больших, необходимых петель?

ответ

12

Во-первых, многие из этих «петель являются плохими» болтовнями из темных веков, когда петли, где фактически менее эффективно реализованы, в частности, в некоторых версиях S-Plus.

Тем не менее, и в то время как Ваш комментарий о необходимости большого объекта индекса является правильным, вы можете также использовать

  • функции из apply семьи, такие как sapply, lapply или tapply раскатать свои структуры

  • относительно новый iterators пакет, который позволяет также избежать большого вектора вы упомянули как ограничение памяти

  • Ra 'accelerated R' variant and its jit package, который может значительно ускорить простые циклы.

Как дополнительный бонус, варианты одного и два дает путь к параллельному выполнению петель на соответствующих системах с помощью инструментов из CRAN упаковывает снег, многоядерный, или NWS просто назвать несколько.

+0

Dirk, я недавно прочитал статью Ihaka & Lang («Назад в будущее: Lisp как основа для статистической вычислительной системы»), в которой R-петли сравниваются неблагоприятно с Python's. Оба они медленны по сравнению с CLOS. Я спрашиваю, будет ли R «не похож» на функциональный язык. Что вы думаете? – gappy

+1

Никакой дополнительной информации здесь, извините. С одной стороны, у вас большая база пользователей R и необходимость обратной совместимости, с другой - желание экспериментировать с новыми функциями. Я думаю, что изменения будут только эволюционными, а не революционными. –