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

Эффективность выполнения в сравнении с эффективностью программы в R

В классическом и блестящем справочном руководстве по программированию Perl содержится раздел, в котором авторы предоставляют список рекомендаций по написанию Perl, который максимально эффективен с точки зрения вычислений, а затем список рекомендаций по написанию Perl, который максимально эффективен для программистов, после чего следует больше советов для эффективного администратора, эффективности портера и эффективности пользователя. Совет обычно совершенно противоречив. (Например, "использовать глобальные переменные", "не использовать глобальные переменные" ).

Я подумал об этом, работая над превращением некоторого "программируемого эффективного" R-кода в "эффективный" с точки зрения вычислений и поддержки.

Какие интересные и полезные советы для стиля R в этих строках? Какие методы максимально эффективны для программистов и каковы эквивалентные методы, которые учитывают другие понятия эффективности?

4b9b3361

Ответ 1

Programmer efficient                 |   Computationally efficient
                                     |
Write everything in R                |   Call C/Fortran routines
Reuse code                           |   Custom create everything 
  (functions not scripts,            |
  packages not individual functions) |
Use high level functions             |   Use low-level functions
Write things that work               |   Write it, profile it, optimise it.
                                     |     Repeat ad infinitum.

Ответ 2

То, что вы можете рассчитывать на замедление, - это то, что в цикле перестраивает данные, например, добавляя элементы к вектору, если это сделано много.

Ответ 3

Я думаю, что стилистические рекомендации (как обсуждалось ранее на SO) помогают повысить эффективность программиста. R Core, похоже, согласен с предоставлением некоторых советов (и параметров Emacs для последовательного отступов).

Эффективность исполнения более сложно достичь по указанию. Возможно, вам придется вернуться к правилам ('vectorize'), а также профилировать.