Hoja de Estilo del lenguaje R

Autor/a

Christian Ballejo

Convenciones de estilo R

R es bastante indulgente con la forma en que escribimos código, a diferencia de otros lenguajes como Python, donde un espacio mal puesto puede arruinar el script. Sin embargo, adoptar una guía de estilo mejora la legibilidad, facilita la colaboración y reduce errores.

Las siguientes líneas de código producen el mismo resultado, pero no todas son igual de claras:

# Opción 1
mpg |> 
  filter(cty > 10, class == "compact")

# Opción 2
mpg |> filter(cty > 10, class == "compact")

# Opción 3
mpg |> 
  filter(cty > 10, 
         class == "compact")

# Opción 4
mpg |> filter(cty>10, class=="compact")

# Opción 5
filter(mpg,cty>10,class=="compact")

# Opción 6
mpg |> 
filter(cty > 10, 
                        class == "compact")

# Opción 7
filter ( mpg,cty>10,     class=="compact" )

Las tres primeras versiones son más legibles. El resto, aunque válidas, son difíciles de seguir, especialmente en trabajos colaborativos o materiales docentes.

Guía de estilo de tidyverse

Para ayudar a mejorar la legibilidad y facilitar el compartir código con otros, el equipo de Tidyverse publicó una guía concisa con ejemplos claros de buenas y malas formas de escribir código, nombres de variables, sangría, líneas largas, y más:

➡️ https://style.tidyverse.org/

Además, RStudio incluye herramientas para aplicar estas convenciones automáticamente. Por ejemplo, seleccionando el código y presionando Ctrl + i (Windows) se puede reidentar el texto. No siempre es perfecto, pero es realmente útil para lograr la sangría correcta sin tener que presionar manualmente espacio muchas veces.

Espaciado

Colocar espacios después de las comas:

✔️ Correcto

filter(mpg, cty > 10)

✖️ Incorrecto

filter(mpg , cty > 10)

filter(mpg ,cty > 10)

filter(mpg,cty > 10)

Colocar espacios después de comas y alrededor de operadores (+, -, >, =, etc.) mejora la legibilidad. También se deben evitar espacios innecesarios dentro de paréntesis:

✔️ Correcto

filter(mpg, cty > 10)

✖️ Incorrecto

filter(mpg, cty>10)

filter(mpg, cty> 10)

filter(mpg, cty >10)

No colocar espacios alrededor de paréntesis que sean parte de funciones:

✔️ Correcto

filter(mpg, cty > 10)

✖️ Incorrecto

filter (mpg, cty > 10)

filter ( mpg, cty > 10)

filter( mpg, cty > 10 )

Líneas largas

En general, es una buena práctica no tener líneas de código muy largas. Se recomienda limitar las líneas a 80 caracteres. Para visualizarlo, en RStudio vamos a Tools > Global Options > Code > Displayy seleccionamos la casilla Show margin.

Se sugiere agregar saltos de línea dentro de las líneas de código más largas, los mismos deben colocarse luego de las comas y los argumentos se deben alinear dentro de la función:

✔️ Correcto

filter(mpg, cty > 10, class == "compact")


filter(mpg, cty > 10, 
       class == "compact")


filter(mpg,
       cty > 10,
       class == "compact")

filter(mpg, 
       cty > 10, 
       class %in% c("compact", "pickup", "midsize", "subcompact", 
                    "suv", "2seater", "minivan"))

✖️ Incorrecto

filter(mpg, cty > 10, class %in% c("compact", "pickup", "midsize", "subcompact", "suv", "2seater", "minivan"))

Tuberías y capas ggplot2

Colocar cada paso de la tubería (%>% ó |>) en una línea separada, con sangría de dos espacios debajo del operador:

✔️ Correcto

mpg |> 
  filter(cty > 10) |> 
  group_by(class) |> 
  summarize(avg_hwy = mean(hwy))

✖️ Incorrecto

# Mal
mpg |> filter(cty > 10) |> group_by(class) |> 
  summarize(avg_hwy = mean(hwy))

# Muy mal
mpg |> filter(cty > 10) |> group_by(class) |> summarize(avg_hwy = mean(hwy))

# Tan mal que no funciona
mpg |> 
  filter(cty > 10)
  |> group_by(class)
  |> summarize(avg_hwy = mean(hwy))

Lo mismo aplica para las capas de gráficos de ggplot2, usando el conector + al final de la línea y debajo sangría de dos espacios:

✔️ Correcto

ggplot(mpg, aes(x = cty, y = hwy, color = class)) +
  geom_point() +
  geom_smooth() +
  theme_bw()

# Mal
ggplot(mpg, aes(x = cty, y = hwy, color = class)) +
  geom_point() + geom_smooth() +
  theme_bw()

# Muy mal
ggplot(mpg, aes(x = cty, y = hwy, color = class)) + geom_point() + geom_smooth() + theme_bw()

# Tan mal que no funciona
ggplot(mpg, aes(x = cty, y = hwy, color = class))
  + geom_point()
  + geom_smooth() 
  + theme_bw()

✖️ Incorrecto

# Mal
ggplot(mpg, aes(x = cty, y = hwy, color = class)) +
  geom_point() + geom_smooth() +
  theme_bw()

# Muy mal
ggplot(mpg, aes(x = cty, y = hwy, color = class)) + geom_point() + geom_smooth() + theme_bw()

# Tan mal que no funciona
ggplot(mpg, aes(x = cty, y = hwy, color = class))
  + geom_point()
  + geom_smooth() 
  + theme_bw()

Comentarios

Los comentarios deben comenzar con # seguido de un espacio:

✔️ Correcto

# Bien

✖️ Incorrecto

#Mal

    #Mal

Si el comentario es corto, se puede incluir en la misma línea, separado por al menos dos espacios para mejorar la legibilidad:

mpg |> 
  filter(cty > 10) |>  # filtro filas donde cty es 10 o más
  group_by(class) |>  # estratifica por class
  summarize(avg_hwy = mean(hwy))  # resume la media de hwy por cada grupo

Se puede agregar espacios adicionales para alinear los comentarios en línea, si lo deseamos:

mpg |> 
  filter(cty > 10) |>             # filtro filas donde cty es 10 o más
  group_by(class) |>              # estratifica por class
  summarize(avg_hwy = mean(hwy))  # resume la media de hwy por cada grupo

Si el comentario es muy largo, podemos dividirlo en varias líneas. RStudio incluye una herramienta útil para comentarios largos: Code > Reflow Comment los ajusta automáticamente al ancho deseado.

Volver arriba

Reutilización