Estilo de escritura en R
Guía de Estilo de R
R es un lenguaje de programación de alto nivel utilizado principalmente para el cálculo estadístico y la creación de gráficos. El objetivo de la Guía de Estilo de Programación en R es facilitar la lectura, el intercambio y la verificación de nuestro código en R.
La Guía de Estilo de R se basa en la Guía de Estilo Tidyverse de Hadley Wickham.
Sintaxis
Notación y nomenclatura
Nombres de archivos
Los nombres de los archivos deben ser significativos y terminar en .R.
# Correcto
-models.R
fit-functions.R
utility
# Incorrecto
foo.r stuff.r
Si los archivos deben ejecutarse en secuencia, antepón números:
0-download.R
1-parse.R
2-explore.R
Nombres de objetos
“Sólo hay dos cosas difíciles en la Ciencia de la Computación: la invalidación de caché y nombrar cosas.”
— Phil Karlton
Los nombres de variables y funciones deben estar en minúsculas. Usa un guion bajo (_) para separar palabras dentro de un nombre. Generalmente, los nombres de variables deben ser sustantivos y los nombres de funciones deben ser verbos. Esfuérzate por usar nombres que sean concisos y significativos (¡esto no es fácil!).
# Correcto
day_one
day_1
# Incorrecto
first_day_of_the_month
DayOne
dayone djm1
En la medida de lo posible, evita usar nombres de funciones y variables existentes. Hacerlo causará confusión para los lectores de tu código.
# Incorrecto
<- FALSE
T <- 10
c <- function(x) sum(x) mean
Espaciado
Coloca espacios alrededor de todos los operadores infijos (=, +, -, <-, etc.). La misma regla se aplica al usar = en llamadas a funciones. Siempre pon un espacio después de una coma, y nunca antes (igual que en el inglés regular).
# Correcto
<- mean(feet / 12 + inches, na.rm = TRUE)
average
# Incorrecto
<-mean(feet/12+inches,na.rm=TRUE) average
Hay una pequeña excepción a esta regla: :, :: y ::: no necesitan espacios alrededor.
# Correcto
<- 1:10
x ::get
base
# Incorrecto
<- 1 : 10
x :: get base
Coloca un espacio antes de los paréntesis izquierdos, excepto en una llamada a función.
# Correcto
if (debug) do(x)
plot(x, y)
# Incorrecto
if(debug)do(x)
plot (x, y)
El espaciado extra (es decir, más de un espacio en fila) es aceptable si mejora la alineación de signos iguales o asignaciones (<-).
list(
total = a + b + c,
mean = (a + b + c) / n
)
No coloques espacios alrededor del código en paréntesis o corchetes (a menos que haya una coma, en cuyo caso, sigue la regla anterior).
# Correcto
if (debug) do(x)
5, ]
diamonds[
# Incorrecto
if ( debug ) do(x) # No debe haber espacios alrededor de debug
1,] # Necesita un espacio después de la coma
x[1 ,] # El espacio va después de la coma, no antes x[
Llaves
Una llave de apertura nunca debe ir en su propia línea y siempre debe ser seguida por una nueva línea. Una llave de cierre siempre debe ir en su propia línea, a menos que esté seguida de else
.
Siempre indenta el código dentro de las llaves.
# Correcto
if (y < 0 && debug) {
message("Y is negative")
}
if (y == 0) {
log(x)
else {
} ^ x
y
}
# Incorrecto
if (y < 0 && debug)
message("Y is negative")
if (y == 0) {
log(x)
} else {
^ x
y }
Está bien dejar declaraciones muy cortas en la misma línea:
if (y < 0 && debug) message("Y is negative")
Asignación
Usa <-, no =, para la asignación.
# Correcto
<- 5
x
# Incorrecto
= 5 x
comentarios
Comenta tu código. Cada línea de un comentario debe comenzar con el símbolo de comentario y un espacio: #. Los comentarios deben explicar el porqué, no el qué.
Usa líneas comentadas de - y = para dividir tu archivo en secciones fácilmente legibles.
# Load data ---------------------------
# Plot data ---------------------------
Convenciones de Nomenclatura
Identificar las funciones con BigCamelCase para distinguirlas claramente de otros objetos.
BigCamelCase vs. dot.case: BigCamelCase es una convención de nomenclatura en la que las palabras se concatenan sin espacios y cada palabra comienza con una letra mayúscula. Por ejemplo, CalculateSum
. En cambio, dot.case utiliza puntos para separar palabras, como en calculate.sum
.
# Correcto
<- function() {
DoNothing return(invisible(NULL))
}
Los nombres de las funciones privadas deben comenzar con un punto. Esto ayuda a comunicar tanto el origen de la función como su uso previsto.
# Correcto
<- function() {
.DoNothingPrivately return(invisible(NULL))
}
Pipes
Asignación a la derecha
No se recomienda la asignación a la derecha.
# Incorrecto
%>%
iris ::summarize(max_petal = max(Petal.Width)) -> results
dplyr
# Correcto
<- iris %>%
results ::summarize(max_petal = max(Petal.Width)) dplyr
Esta convención difiere sustancialmente de las prácticas en otros lenguajes y dificulta ver dónde se define un objeto en el código. Por ejemplo, buscar foo <-
es más fácil que buscar foo <-
y -> foo
(posiblemente dividido en varias líneas).
Usar retornos explícitos
No confíes en la característica de retorno implícito de R. Es mejor ser claro sobre tu intención de return()
un objeto.
# Correcto
<- function(x, y) {
AddValues return(x + y)
}
# Incorrecto
<- function(x, y) {
AddValues + y
x }