Эффективность исполнения против эффективности программиста в R - PullRequest
12 голосов
/ 03 февраля 2010

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

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

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

Ответы [ 3 ]

19 голосов
/ 03 февраля 2010
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 голосов
/ 03 февраля 2010

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

1 голос
/ 03 февраля 2010

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

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

...