2010-02-03 17 views
12

La clásica y brillante libro de referencia Programación Perl tiene una sección en la que los autores proporcionan una lista de consejos sobre cómo escribir Perl que es computacionalmente eficiente, seguido de una lista de consejos para cómo escribir en Perl que es máximamente eficiente programador , seguido por más consejos para mantenedor eficiente, Porter eficiente y de usuario eficiente. El consejo suele ser completamente contradictorio. (Por ejemplo, "use globales", "no use globales")Eficiencia de ejecución vs Eficiencia del programador en R

Pensé en esto mientras trabajaba para convertir algún código R "programador eficiente" en código "computacionalmente y mantenedor eficiente".

¿Cuáles son algunos consejos interesantes y útiles para el estilo R a lo largo de estas líneas? ¿Qué prácticas son eficientes al máximo para programadores y cuáles son las prácticas equivalentes que abordan otras nociones de eficiencia?

+0

recordar los usuarios sólo se preocupan por la rapidez con que funciona la aplicación, no lo rápido que se puede construir o realizar su mantenimiento, Esto parece estar perdido los últimos años a medida que la gente parece pensar la eficiencia programador supera a todo lo . Créanme, no a los usuarios. Si el consejo es contradictorio, vaya con el consejo que es más probable que produzca código de ejecución eficiente, no lo que será más rápido de escribir. – HLGEM

+0

@HLGEM: a los usuarios también les interesa obtener la aplicación rápidamente, lo que les cuesta y, a veces, qué tan rápido se puede modificar a lo que desean. Para la mayoría de las aplicaciones, la ineficiencia computacional es irrelevante. Incluso para las aplicaciones de tipo R, la potencia de cómputo está aumentando mucho más rápido que la productividad del programador, por lo que el punto de equilibrio se desplaza aún más hacia la valoración de la productividad del programador. –

+2

Creo que el comentario de @HLGEM es muy apropiado para aplicaciones de escritorio o web que son de uso general y público amplio. Gran parte de lo que está escrito en R, sin embargo, es específico del dominio y se usa como parte del banco de trabajo del analista. Sospecho que este caso de uso diferente cambia fundamentalmente el cálculo del valor marginal. –

Respuesta

1

Creo que las pautas de estilo (como se discutió anteriormente en SO) ayudan a la eficiencia del programador. R Core parece estar de acuerdo con proporcionar algunos consejos (y los parámetros de Emacs para la sangría consistente).

La eficiencia de ejecución es más difícil de lograr por decreto. Es posible que deba recurrir a reglas generales ('vectorizar') y a crear perfiles.

2

Lo que puede contar con la lentitud es cualquier cosa que, en un bucle, reconstruye datos, como agregar elementos a un vector, si se hace mucho.

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

Me encantaría ver algunos ejemplos más como este, ¡especialmente con más detalles! – Harlan

Cuestiones relacionadas