2010-02-03 20 views
12

Il classico e brillante libro di testo Perl di programmazione ha una sezione in cui gli autori forniscono un elenco di consigli su come scrivere Perl che è al massimo efficiente dal punto di vista, seguito da un elenco di consigli per come scrivere Perl che è massimamente programmatore efficiente, seguita da ulteriori consigli per manutentore efficiente, portiere efficiente e utente efficiente. Il consiglio è di solito completamente contraddittorio. (Ad es., "Usa globali", "non utilizzare le globali".)Efficienza di esecuzione rispetto al programmatore Efficienza in R

Ho pensato a questo mentre lavoravo per trasformare un codice R "programmatore efficiente" in codice "computazionalmente e manutentore efficiente".

Quali sono alcuni suggerimenti interessanti e utili per lo stile R lungo queste linee? Quali pratiche sono al massimo programmatrici efficienti e quali sono le pratiche equivalenti che affrontano altre nozioni di efficienza?

+0

Ricorda gli utenti si preoccupano solo la velocità con cui funziona l'applicazione, non quanto velocemente si può costruire o mantenere, Questo sembra essere perso negli ultimi anni come la gente sembra pensare l'efficienza programmatore vince su tutto . Credimi, non agli utenti. Se il consiglio è contraddittorio, segui il consiglio che è più propizio a produrre un codice efficace che non sia quello che sarà più veloce da scrivere. – HLGEM

+0

@HLGEM: Gli utenti si preoccupano anche di ottenere rapidamente l'applicazione, e quanto costa loro, e talvolta quanto velocemente può essere modificata per quello che vogliono. Per la maggior parte delle app, l'inefficienza computazionale è irrilevante. Anche per le app di tipo R, la potenza di calcolo sta aumentando molto più rapidamente della produttività del programmatore, e quindi il punto di equilibrio si sposta sempre più verso la valutazione della produttività del programmatore. –

+2

Penso che il commento di @ HLGEM sia molto appropriato per le app desktop o web che hanno uno scopo generale e un vasto pubblico. Gran parte di ciò che è scritto in R, tuttavia, è specifico del dominio e utilizzato come parte del workbench di un analista. Sospetto che questo diverso caso d'uso cambi radicalmente il calcolo del valore marginale. –

risposta

1

Penso che le linee guida di stile (come discusso prima su SO) aiutano l'efficienza del programmatore. R Core sembra concordare fornendo alcuni suggerimenti (ed i parametri di Emacs per un rientro coerente).

L'efficienza di esecuzione è più difficile da raggiungere per decreto. Potrebbe essere necessario ricorrere alle regole pratiche ("vectorise") e al profiling.

2

Ciò che si può contare per essere lenti è tutto ciò che, in un ciclo, ricostruisce i dati, come aggiungere elementi ad un vettore, se viene eseguito molto.

19
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. 
+0

Mi piacerebbe vedere altri esempi come questo, specialmente con maggiori dettagli! – Harlan