Классический и блестящий справочник Perl Программирования имеет раздел, в котором авторы предоставляют список совета для того, как записать Perl, который максимально в вычислительном отношении эффективен, сопровождается списком совета для того, как записать Perl, который является максимально программистом, эффективным, сопровождаемым большим советом для эффективного специалиста по обслуживанию, эффективный носильщик, и эффективный пользователь. Совет является обычно абсолютно противоречащим. (Например, "используйте globals", "не используют globals".)
Я думал об этом при работе над превращением некоторого "программиста, эффективного" R код в "в вычислительном отношении и обслуживающий эффективный" код.
Каковы некоторые интересные и полезные подсказки для стиля R вдоль этих строк? Какие методы являются максимально эффективным программистом, и каковы эквивалентные методы, которые обращаются к другим понятиям эффективности?
Эффективность работы программиста | Эффективность вычислений | Напишите все в R | Звоните по телефону C/Fortran. Код повторного использования | Пользовательские создать все (функции не скрипты, | пакеты, а не отдельные функции) | Использовать высокоуровневые функции | Использовать низкоуровневые функции Написать то, что работает | Написать, профилировать, оптимизировать. | Повторить ad infinitum.
На медленность можно рассчитывать только в том случае, если в цикле происходит перекомпиляция данных, например, добавление элементов в вектор, , если это сделано много .
Я думаю, что рекомендации по стилю (как обсуждалось ранее в SO) помогают повысить эффективность программиста. R Core, кажется, соглашается, предоставляя некоторые подсказки (и параметры Emacs для согласованного отступа).
Сложнее добиться эффективности исполнения декретом. Возможно, вам придется вернуться к практическим правилам («векторизация»), а также к профилированию.