¿Cuál es su estilo preferido para nombrar variables en R? [cerrado]

110

¿Qué convenciones para nombrar variables y funciones prefiere en el código R?

Por lo que puedo decir, hay varias convenciones diferentes, todas las cuales coexisten en una armonía cacofónica:

1. Uso de separador de puntos, p. Ej.

  stock.prices <- c(12.01, 10.12)
  col.names    <- c('symbol','price')

Ventajas: tiene precedencia histórica en la comunidad R, prevalece en todo el núcleo R y es recomendada por la Guía de estilo R de Google .

Contras: lleno de connotaciones orientadas a objetos y confuso para los novatos de R

2. Uso de guiones bajos

  stock_prices <- c(12.01, 10.12)
  col_names    <- c('symbol','price')

Ventajas: una convención común en muchos idiomas de programación; favorecido por la Guía de estilo de Hadley Wickham y utilizado en los paquetes ggplot2 y plyr.

Contras: No históricamente utilizado por los programadores de R; está molestamente mapeado al operador '<-' en Emacs-Speaks-Statistics (modificable con 'ess-toggle-underscore').

3. Uso de capitalización mixta (camelCase)

  stockPrices <- c(12.01, 10.12)
  colNames    <- c('symbol','price')

Ventajas: parece tener una amplia adopción en varias comunidades lingüísticas.

Contras: Tiene un precedente reciente, pero no se ha utilizado históricamente (ni en la base R ni en su documentación).

Finalmente, como si no fuera lo suficientemente confuso, debo señalar que la Guía de estilo de Google aboga por la notación de puntos para las variables, pero la combinación de mayúsculas para las funciones.

La falta de estilo coherente en todos los paquetes de R es problemática en varios niveles. Desde el punto de vista del desarrollador, dificulta mantener y extender el código de otros (especialmente cuando su estilo es inconsistente con el suyo). Desde el punto de vista de un usuario de R, la sintaxis inconsistente hace que la curva de aprendizaje de R sea más pronunciada, al multiplicar las formas en que se puede expresar un concepto (por ejemplo, ¿esa función de conversión de fecha es comoDate (), as.date () o as_date ()? No, es como. Fecha()).

medriscoll
fuente
1
También hay casos de estilo MATLAB alllowercasenombres de variables, y un montón de nombres muy cortos rectos-de-la-ecuación ( x, y, etc.).
Richie Cotton
5
Los guiones bajos son como Python, así que tiendo a usar guiones bajos. ESS debería arreglarse, eso es realmente tonto.
Brendan OConnor
7
No hay nada que arreglar, tiene una palanca para eso. Pero el comportamiento predeterminado es interpretar un guión bajo como un atajo para <, lo que le ahorra una tecla para presionar. Entonces, si publica variables con guiones bajos (Hola, Hadley), obliga a todos los usuarios de ESS a presionar _ dos veces para obtener el comportamiento original, o para personalizar su configuración de ESS. Todavía prefiero camelCase por una nueva millas náuticas.
Dirk Eddelbuettel
2
camelCase también tiene problemas, por ejemplo, la caja camel estándar ImfDataTransformedo la versión natural extendida IMFDataTransformedno son tan fáciles de leer como mi TOGGLEcamelCase preferido: IMFdataTransformed...
PatrickT
1
Voy a votar para cerrar esta pregunta como fuera de tema porque las respuestas seguramente se basarán en opiniones.
Ben Bolker

Respuestas:

81

Buenas respuestas anteriores, así que solo un poco para agregar aquí:

  • los guiones bajos son realmente molestos para los usuarios de ESS; dado que ESS se usa ampliamente, no verá muchos guiones bajos en el código creado por los usuarios de ESS (y ese conjunto incluye un montón de R Core y autores de CRAN, a pesar de excepciones como Hadley);

  • los puntos también son malvados porque pueden mezclarse en un método simple de envío; Creo que una vez leí comentarios en este sentido en uno de la lista R: los puntos son un artefacto histórico y ya no se fomentan;

  • así que tenemos un claro ganador que sigue en pie en la última ronda: camelCase. Tampoco estoy seguro de si estoy realmente de acuerdo con la afirmación de 'carecer de precedentes en la comunidad R'.

Y sí: el pragmatismo y la coherencia triunfan sobre el dogma. Entonces, lo que sea que funcione y sea utilizado por colegas y coautores. Después de todo, todavía tenemos espacios en blanco y llaves para discutir :)

Dirk Eddelbuettel
fuente
6
+1 ¡Bien dicho! [Si tan solo el equipo central publicara una guía de estilo definitiva; Siento que eso daría más crédito a su uso ya implícito.]
Shane
1
Podría estar recordando mal debido a mi propio sesgo hacia el caso mixto, pero creo que eso es lo que RG siempre usó cuando trabajaba para él. ¡Me imagino que lo que es bueno para RG es bueno para mí!
geoffjentry
Geoff: No es una mala regla para seguir :)
Dirk Eddelbuettel
2
Gracias por el pulgar hacia arriba. En cuanto al 'documento de estilo canónico': desearlo no lo hace así, o estaría montando ponis rosas. Tal vez pueda comenzar por crear algo, que podría pegar en R Wiki y todos lo editamos, adoptamos y nos adherimos a él. La esperanza es eterna, como dicen ...
Dirk Eddelbuettel
1
@Dirk: planeo comenzar a dirigirme hacia la carcasa de camello según su recomendación, pero tengo curiosidad de saber por qué ?make.namesparece sugerir que se prefieren los nombres separados por puntos.
David LeBauer
73

Hice una encuesta sobre las convenciones de nomenclatura que se utilizan realmente en CRAN que fueron aceptadas en el R Journal :) Aquí hay un gráfico que resume los resultados:

ingrese la descripción de la imagen aquí

Resulta (tal vez sin sorpresas) que lowerCamelCase se usaba con mayor frecuencia para los nombres de funciones y los nombres separados por períodos se usaban con mayor frecuencia para los parámetros. Sin embargo, usar UpperCamelCase, como lo recomienda la guía de estilo R de Google, es realmente raro, y es un poco extraño que defiendan el uso de esa convención de nomenclatura.

El artículo completo está aquí:

http://journal.r-project.org/archive/2012-2/RJournal_2012-2_Baaaath.pdf

Rasmus Bååth
fuente
2
¿Cómo es que los porcentajes no suman el 100%?
e9t
10
@ e9t Porque un nombre puede coincidir con muchas convenciones de nomenclatura. printcoincide con todas las convenciones excepto UpperCamel y .OTHER_style.
Rasmus Bååth
Sería bueno actualizar este documento.
Samuel-Rosa
34

¡Subraya todo el camino! Contrariamente a la opinión popular, hay una serie de funciones en la base R que usan guiones bajos. Corre grep("^[^\\.]*$", apropos("_"), value = T)a verlos a todos.

Yo uso el estilo de codificación oficial de Hadley ;)

Hadley
fuente
1
¡Está muy bien! No estaba al tanto de la función apropos antes. Esto me devuelve 10 funciones en R 2.9.0; Difícilmente diría que es un caso convincente. ¿Cuál es su razón fundamental para los subrayados cuando claramente son una minoría para R?
Shane
3
Bueno, es 16 en R 2.10.0, por lo que es un aumento del 60% por versión;) Me gustan principalmente porque me recuerdan a Ruby; camelCase me recuerda a Java.
hadley
6
Hadley, mi corazón dice que apoye su insurgencia, pero mi cabeza dice que respete el estándar de la comunidad y diga que sí a camelCase. :( Pero quizás lo único que importa sea la consistencia en uno mismo.
medriscoll
5

Me gusta camelCase cuando el camello proporciona algo significativo, como el tipo de datos.

dfProfitLoss, donde df = marco de datos

o

vdfMergedFiles (), donde la función toma un vector y escupe un marco de datos

Si bien creo que _ realmente aumenta la legibilidad, parece que hay demasiados problemas con el uso de.-_ U otros caracteres en los nombres. Especialmente si trabaja en varios idiomas.

Robert
fuente
3

Esto se reduce a preferencias personales, pero sigo la guía de estilo de Google porque es coherente con el estilo del equipo principal. Todavía tengo que ver un guión bajo en una variable en la base R.

Shane
fuente
2

Como han mencionado otros, los guiones bajos arruinarán a mucha gente. No, no está prohibido, pero tampoco es particularmente común.

El uso de puntos como separador se vuelve un poco complicado con las clases S3 y similares.

En mi experiencia, parece que muchos de los mucks de R prefieren el uso de camelCase, con un poco de uso de puntos y un puñado de guiones bajos.

geoffjentry
fuente
1

Por lo general, cambio el nombre de mis variables usando un ix de guiones bajos y una combinación de mayúsculas (camelCase). Las variables simples se nombran usando guiones bajos, ejemplo:

PSOE_votes -> número de votos del PSOE (grupo político de España).

PSOE_states -> Categórico, indica el estado donde gana PSOE (Aragón, Andalucía, ...)

PSOE_political_force -> Categorial, indica la posición entre los grupos políticos del PSOE {primero, segundo, tercero)

PSOE_07 -> Unión de PSOE_votes + PSOE_states + PSOE_political_force en 2007 (h eader -> votos, estados, posición )

Si mi variable es el resultado de una función aplicada en una / dos Variables, utilizo una capitalización mixta.

Ejemplo:

positionXstates <- xtabs (~ estados + posición, PSOE_07)

calejero
fuente
0

Tengo preferencia por las capitales mixtas.

Pero a menudo uso puntos para indicar cuál es el tipo de variable:

MixedCapitals.mat es una matriz. MixedCapitals.lm es un modelo lineal. MixedCapitals.lst es un objeto de lista.

y así.

Jesse
fuente