Эффективность выполнения в сравнении с эффективностью программы в R
В классическом и блестящем справочном руководстве по программированию Perl содержится раздел, в котором авторы предоставляют список рекомендаций по написанию Perl, который максимально эффективен с точки зрения вычислений, а затем список рекомендаций по написанию Perl, который максимально эффективен для программистов, после чего следует больше советов для эффективного администратора, эффективности портера и эффективности пользователя. Совет обычно совершенно противоречив. (Например, "использовать глобальные переменные", "не использовать глобальные переменные" ).
Я подумал об этом, работая над превращением некоторого "программируемого эффективного" R-кода в "эффективный" с точки зрения вычислений и поддержки.
Какие интересные и полезные советы для стиля R в этих строках? Какие методы максимально эффективны для программистов и каковы эквивалентные методы, которые учитывают другие понятия эффективности?
Ответы
Ответ 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'), а также профилировать.