12
votes

Efficacité Efficacité VS Efficacité du programmeur dans R

La programmation classique et brillante PERL Refreen Look a une section dans laquelle les auteurs fournissent une liste de conseils pour savoir comment écrire Perl qui est au maximum efficace de calcul , suivie d'une liste de conseils pour savoir comment Écrivez Perl qui est au maximum programmeur efficace , suivi de plus de conseils pour mainteneur efficace , porteur efficace et utilisateur efficace . Le conseil est généralement complètement contradictoire. (Par exemple, "utiliser les globaux globaux", "n'utilisez pas de globaux.")

J'ai pensé à cela tout en travaillant sur la transformation du code R "efficace du programmeur" dans le code "calculé et efficace de maintenance".

Quels sont des conseils intéressants et utiles pour le style R dans ces lignes? Quelles sont les pratiques maximales programmeuses efficaces et quelles sont les pratiques équivalentes qui traitent d'autres notions d'efficacité?


4 commentaires

N'oubliez pas que les utilisateurs ne se soucient que de la rapidité avec laquelle l'application fonctionne, et non de la rapidité avec laquelle vous pouvez la construire ou de la maintenir, cela semble être perdu ces dernières années, car les gens semblent penser à tout l'efficacité du programmeur. Croyez-moi, ça ne veut pas aux utilisateurs. Si les conseils sont contradictoires, allez avec les conseils les plus susceptibles de produire de manière efficace le code d'efficacité et non ce qui sera le plus rapide à écrire.


@Hlgem: les utilisateurs se soucient également d'obtenir la demande rapide et de leur coût, et parfois à quel point il peut être modifié à ce qu'ils veulent. Pour la plupart des applications, l'inefficacité informatique n'est pas pertinente. Même pour les applications de type R, la puissance de calcul augmente beaucoup plus vite que la productivité du programmeur. Le point de vue de la balance se déplace donc jamais plus loin pour évaluer la productivité du programmeur.


Je pense que le commentaire de HLGEM est très approprié pour les applications de bureau ou Web qui sont des besoins généraux et un large public. Cependant, une grande partie de ce qui est écrit dans R, cependant, est spécifique à un domaine et utilisé dans le cadre d'un établissement d'analyste. Je soupçonne que cette affaire d'utilisation différente modifie fondamentalement le calcul de la valeur marginale.


@JD: Pour la plupart des applications de bureau et Web, l'efficacité informatique n'est pas si importante. La performance des applications sera généralement limitée par d'autres choses. Bien entendu, il existe des exceptions, mais la programmation pour une efficacité de calcul maximale est généralement la mauvaise chose à faire. R, d'autre part, est généralement utilisé à des fins numériques, où l'efficacité de la calculation est importante. C'est également vrai, comme vous le soulignez, les programmes R ont tendance à être plus spécialisés. Le temps de programmation ne peut donc pas être amorti comme un produit d'enveloppement de rétrécissement. Les compromis sont similaires, mais les facteurs qui y sont entrés sont différents.


3 Réponses :


1
votes

Je pense que les directives de style (comme indiqué précédemment) aident l'efficacité du programmeur. R Core semble être d'accord en fournissant des indices (et des paramètres EMACS pour une indentation cohérente).

L'efficacité d'exécution est plus difficile à réaliser par décret. Vous devrez peut-être revenir aux règles de pouce («vectorisible») ainsi que du profilage.


0 commentaires

2
votes

Ce que vous pouvez compter sur la lente est tout ce qui, dans une boucle, reconstruit des données, comme des éléments ajoutés à un vecteur, s'il est fait beaucoup . .


0 commentaires

20
votes
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.

1 commentaires

J'aimerais voir d'autres exemples comme celui-ci, surtout avec plus de détails!