Banco de preguntas y errores frecuentes

Última actualización: 2024-11-19 | Mejora esta página

Hoja de ruta

Preguntas

  • ¿Tiene algunas dificultades con el código en R?

Objetivos

  • En este documento usted podrá encontrar algunas de las preguntas y errores frecuentes de la ejecución del código en R.

Banco de preguntas


¿Cómo instalar un paquete o “librería” en R?

Para instalar un paquete en R puede hacerlo a través de:

  • Le recomendamos que lo haga a través de la función:

R

install.packages("paquete")

Algunos paquetes que están en su fase de desarrollo pueden ser instalados desde la última versión en github u otras ubicaciones utilizando los paquetes remotes o pak.

  • Otra opción es usar la función require:

R

if (!require("paquete")) {
  install.packages("paquete")
}

Esta opción es útil porque instala el paquete si no está previamente instalado. Se puede combinar con remotes o pak

  • Usar la interfaz de RStudio:

    1. Haga click en la ventana Packages

    2. Presione el botón Install

    3. Escriba el nombre del (de los) paquete(s) a instalar

    4. Presione botón Install.

¿Cómo usar una función?

          Si la función pertenece a un paquete de R, puede hacerse de dos formas:

  • Llamar el nombre del paquete de R y poner dos veces dos puntos (::) y en seguida llamar el nombre de la función. Ahora debe diligenciar los argumentos

R

paquete::nombre_de_la_funcion(argumentos)
  • Cargar el paquete de R con library:

R

library("paquete")

y una vez cargada. Llamar el nombre de la función y diligenciar los argumentos

R

nombre_de_la_funcion(argumentos)

Es importante tener previamente el paquete instalado. Si tiene dudas vaya a ¿Cómo instalar un paquete en R?

  •           Si la función fue creada por usted y se encuentra en el ambiente global:

Simplemente llame la función por su nombre y proporcione los argumentos necesarios:

R

nombre_de_su_funcion(argumentos)

¿Cómo cargar un paquete o “librería”?

Algunas opciones para cargar un paquete son:

  • La recomendada es utilizar la función library:

R

library("paquete")
  • Utilizando la interfaz de RStudio:

    1. Vaya a la sección derecha inferior a la pestaña Packages

    2. De click en el cuadro frente a cada función, esto activará la función library.

¿Si cargo las librerías debo cargarlas cada vez que vaya a usar la función?

No, solo es necesario cargarlas una vez por sesión de R. Sin embargo, si cerro su RStudio o abrió un nuevo proyecto, cuenta como una nueva sesión y, por lo tanto, debe cargarlas de nuevo para poder trabajar.

¿Puedo desactivar una librería que ya cargué sin reiniciar R?

Si, es posible mediante dos opciones:

  • Utilice la función detach

R

detach("package:paquete", unload = TRUE)
  • Utilizando la interfaz de RStudio:

    1. Vaya a la sección derecha inferior a la pestaña Packages

    2. De click en el cuadro frente a cada función (si el cuadro tiene un visto, el paquete está cargado; si el cuadro está vacío, el paquete no está cargado), esto activará la función detach. Advertencia: Si presiona el simbolo de x al lado del paquete lo desinstalará.

No veo el resultado de mi código

Esto puede ocurrir por varios motivos:

  • Si guardo el resultado usando el símbolo de asignación (ej. nombre <- "Laura"). Este aparecerá en el ambiente global (zona superior lateral derecha) y no se ejecutará en la consola a menos que se llame el objeto, es decir,

    1. se ponga el nombre del objeto en la consola y se ejecute (presionando Enter)

    2. o que en el script o Chunck de RMarkdown se presione Control + Enter en Windows o Command + Enter en Mac.

  • Falta alguna librería necesaria. Revise que todas las librerías necesarias estén cargadas al inicio del script.

  • Hay errores en el código. Verifique que no haya errores que impidan que el código se ejecute correctamente. Al ejecutar el código en la consola le aparecerán algunas alertas de errores que pueda tener el código.

  • El script no se ha ejecutado completamente. Asegúrese de ejecutar el script completo para que todas las líneas de código se ejecuten en el orden correcto.

  • El script no se ha ejecutado completamente. Asegúrese de ejecutar el script completo para que todas las líneas de código se ejecuten en el orden correcto.

Errores frecuentes al usar ggplot

  • Sintaxis incorrecta:

    1. Usar ++ en lugar de + para concatenar funciones.

    2. También puede ocurrir que el + queda en la línea de abajo, es importante destacar que para concatenar funciones debe estar al terminar la línea anterior a la que se quiere concadenar.

  • No especificar estéticas (aesthetics):

    1. No incluir aes().
    2. No definir aes() correctamente, por ejemplo, no indicar x o y.
    3. Si bien aes en algunos casos puede ir en la parte inicial, la geometría o estar dividido en secciones, es fundamental que siempre este presente.
  • Datos no presentes:

La columna mencionada en aes() no existe en el conjunto de datos. Usar el nombre incorrecto, recuerde que R es sensible a mayúsculas y minúsculas por los tanto VariableX es diferente a variableX o a variablex.

  • Falta de librerías:

Antes de trabajar con ggplot siempre recuerde cargar la librería con library:

R

library(ggplot2)
  • Errores en geom:
Seleccionar la geom incorrecta para el tipo de datos que se desea representar.

### `filter` no funciona

Esto puede ocurrir por varios motivos:
  • El paquete dplyr no está cargada. Aseguresé de incluir library(dplyr) o library(tidyverse) en su script, y ejecutarlo cada nueva sesión.

  • Hay conflictos de nombres de funciones con otros paquetes. Use dplyr::filter() para especificar qué quiere utilizar la función filter de dplyr.

  • Los datos pueden no estar en el formato esperado. Verifique que la columna que está filtrando existe y tiene los valores adecuados.

filter acepta condiciones lógicas para seleccionar filas. Veamos unos ejemplos:

-          Valores específicos:

R

covid19 %>% filter(estado == "Fallecido")

-          Rangos de valores:

R

covid19 %>% filter(fecha_de_notificacion >= "2020-01-01" & fecha_de_notificacion <= "2020-12-31")

-          Condiciones múltiples:

R

covid19 %>% filter(estado == "Fallecido" & nombre_del_pais == "Colombia")

-          Condiciones con funciones:

R

covid19 %>% filter(grepl("Colombia", nombre_del_pais))

Para saber más sobre filter consulte la documentación.

¿Dónde está el objeto que cree?

Cuando se crea un objeto este se almacena en el ambiente global. Podemos ver el ambiente global en la interfaz de R ubicado en la parte superior lateral derecha.

No funciona el pipe %>%

Recuerde los siguientes puntos:

  • Es importante cargar previamente una librería que contenga el pipe. Por ejemplo: magrittr, dplyr, tidyr o purrr.
  • El pipe debe ir al final de la línea que se va a conectar. No al inicio de la línea conectada:

¿Cómo evitar accidentes?

Cuando se va a almacenar cambios en el objeto donde esta almacenado el dataframe, es recomendable tener algunas precauciones para evitar perder información:

  • Crear un respaldo de los datos en objetos:

o   Hacer copias de seguridad regularmente durante el proceso. Se recomienda hacer una copia inicial para evitar cargar la base de nuevo. Tras hacer algunos procesos, en especial, aquellos que consumen tiempo se recomienda crear respaldos. Puede crear tanto como considere convenientes. Se recomienda crear notas para identificar cada proceso

  • Crear un respaldo de los datos en archivos:

o   Al igual que guardar en objetos, es buena idea guardar los datos que ya han pasado algunos procesos en el disco del computador. Esto evita que si se bloquea la sesión o se apaga el computador los datos procesados estén resguardados. Cada cuanto se deben almacenar depende de quién realiza el procesamiento.

  • Pruebas antes de almacenar:

o   Realizar pruebas de los cambios deseados antes de guardarlos definitivamente.

o   Ejemplo: Si se quiere transformar una variable a numérica, antes de almacernarla y terminar teniendo NAs no deseados en los datos, es recomendable hacer una prueba antes de si se originaran esos NAs

  • Crear variables de respaldo:

o   Algunas veces cuando vamos a transformar una variable es mejor crear una nueva que almacene el contenido de la transformación. Esto evita el riesgo de pérdida de información al transformar una variable.

  • Cuidado al almacenar:

o   No almacenar tablas u objetos transformados accidentalmente.

o   Ej. si creamos una tabla para ver si la variable cambio como se deseaba y luego reutilizamos el código y añadimos la asignación adelante, almacenaríamos la tabla y perderíamos la información que tenía el objeto

Mi dataframe cambió inesperadamente

Cuando tenemos accidentes con nuestros datos algunas opciones son:

-          Revisar cual es el daño y ver si es reparable. Por ejemplo, se cambió el carácter incorrecto en una cadena de texto.

-          Cargar los datos a partir de un respaldo. Si hemos creado respaldos del proceso podemos evitarnos tiempos largo de procesamiento. Entre estos respaldos están las variables de respaldo o los objetos de respaldo (ver ¿Cómo evitar accidentes?).

Uso de la función rename

1.      Llame la base de datos

R

datos

2.      Use el pipe%>% para enlazarlo a la función rename

3.      Llame la función rename y escriba primero el nuevo nombre de la columna y después el nombre de la columna preexistente a la que quiere cambiar el nombre

R

datos <- datos %>% rename(nombrenuevo = nombreantiguo)

n.      Seleccionar algunas filas de un grupo de datos

1.      Llame la base de datos

R

datos

2.      Use el pipe %>% para enlazarlo a la función group_by

R

datos %>% group_by(variable_grupo)

La función group_by creará grupos de datos según una variable determinada en los cuales puede realizar otras acciones como por ejemplo seleccionar los datos en el encabezado de cada grupo.

4.      Enseguida use la función como en este ejemplo podríamos usar head solo para los datos del encabezado de cada grupo.

R

datos <- datos %>% group_by(variabledeinteres) %>% head()

¿Cómo usar summarise?

1.      Llame la base de datos

R

datos

2.      Use el pipe%>%para enlazarlo a la función summarise

R

datos %>% summarise()

La función summarise no puede utilizarse de forma directa, por lo tanto, debe usarse junto a un argumento adentro, por ejemplo:

a.      Obtener el promedio

R

datos %>% 
  summarise(mean = mean(variabledeinteres))

b.      Obtener la desviación estandar

R

datos %>% 
  summarise(sd = sd(variabledeinteres))

Esta función puede usarse con agrupación previa (group_by) para obtener estos valores por cada grupo, por ejemplo,

R

datos %>%  group_by(pais) %>% 
  summarise(
    mean = mean(variabledeinteres), 
    sd = sd(variabledeinteres))

Errores relacionados a grupos (group_by y ungroup)

  • Un error muy frecuente es que se almacena el objeto agrupado (group_by), dado que no se realizó la acción de desagrupar al final. Esto puede generar errores como cálculos incorrectos, resúmenes por grupo en lugar de sobre la totalidad de los datos, y problemas al realizar operaciones subsecuentes en el conjunto de datos. Por ello, recomendamos siempre emplear (ungroup) antes de almacenar. Para usar ungroup() basta con ponerlo al final.

R

datos <- datos %>% 
  group_by(categoria) %>% 
  procesamiento_de_datos(...) %>% 
  ungroup() 

Veamos un ejemplo de un error que puede ocurrir por no desagrupar:

R

library("tidyverse")
set.seed(123) # Para reproducibilidad
#dataframe de ejemplo
tipo_sanguineo <- c("A", "B", "O","AB")
rh <- sample(c("+", "-"), 10, replace = TRUE)
dia <-c(1:5)
f_latidos <- sample(60:100, 200, replace = TRUE)
f_respiratoria <- sample(12:20, 200, replace = TRUE)
df <- data.frame(tipo_sanguineo, rh, dia, f_latidos, f_respiratoria)

#resumen por columnas
por_dia <- df %>%
  group_by(tipo_sanguineo,rh, dia) %>%
  summarize(
    f_l = mean(f_latidos), 
    f_r = mean(f_respiratoria)
  )

Creemos una variable que contenga id únicos por cada fila

R

por_dia %>% mutate(id = row_number())

SALIDA

# A tibble: 20 × 6
# Groups:   tipo_sanguineo, rh [8]
   tipo_sanguineo rh      dia   f_l   f_r    id
   <chr>          <chr> <int> <dbl> <dbl> <int>
 1 A              +         1  76.3  15.2     1
 2 A              +         3  81.5  16.6     2
 3 A              +         4  81.2  15.6     3
 4 A              +         5  81    15.9     4
 5 A              -         2  78.3  16.2     1
 6 AB             +         2  79.3  16       1
 7 AB             +         5  73.1  17.4     2
 8 AB             -         1  83    16.6     1
 9 AB             -         3  79.8  15       2
10 AB             -         4  84.8  17.4     3
11 B              +         2  77.8  16.4     1
12 B              +         5  83.8  14.6     2
13 B              -         1  74.5  14.9     1
14 B              -         3  85.1  16.2     2
15 B              -         4  83.3  16.6     3
16 O              +         1  80.3  15       1
17 O              +         3  78.9  14.8     2
18 O              +         4  81.2  14.9     3
19 O              +         5  84.9  15       4
20 O              -         2  80.7  16.1     1

Cómo puede observar en la columna id en lugar de identificadores únicos tenemos id que se repiten. ¿Por qué sucedió si cada fila es diferente?

La razón a este problema subyace en que los datos siguen agrupados. Aún si no aplicamos directamente el ungroup como se explico antes, todavía podemos solucionarlo.

Veamos como no se solucionaría primero. Un error frecuente al tratar de solucionar este problema es aplicar la función ungroup sin almacenar el resultado.

R

# aplicación equivocada de ungroup
por_dia %>% ungroup() 

SALIDA

# A tibble: 20 × 5
   tipo_sanguineo rh      dia   f_l   f_r
   <chr>          <chr> <int> <dbl> <dbl>
 1 A              +         1  76.3  15.2
 2 A              +         3  81.5  16.6
 3 A              +         4  81.2  15.6
 4 A              +         5  81    15.9
 5 A              -         2  78.3  16.2
 6 AB             +         2  79.3  16
 7 AB             +         5  73.1  17.4
 8 AB             -         1  83    16.6
 9 AB             -         3  79.8  15
10 AB             -         4  84.8  17.4
11 B              +         2  77.8  16.4
12 B              +         5  83.8  14.6
13 B              -         1  74.5  14.9
14 B              -         3  85.1  16.2
15 B              -         4  83.3  16.6
16 O              +         1  80.3  15
17 O              +         3  78.9  14.8
18 O              +         4  81.2  14.9
19 O              +         5  84.9  15
20 O              -         2  80.7  16.1

R

# si bien desagrupa el objeto para imprimirlo, 
# mientras no se almacene  el objeto serguirá agrupado
por_dia %>% mutate(id = row_number())

SALIDA

# A tibble: 20 × 6
# Groups:   tipo_sanguineo, rh [8]
   tipo_sanguineo rh      dia   f_l   f_r    id
   <chr>          <chr> <int> <dbl> <dbl> <int>
 1 A              +         1  76.3  15.2     1
 2 A              +         3  81.5  16.6     2
 3 A              +         4  81.2  15.6     3
 4 A              +         5  81    15.9     4
 5 A              -         2  78.3  16.2     1
 6 AB             +         2  79.3  16       1
 7 AB             +         5  73.1  17.4     2
 8 AB             -         1  83    16.6     1
 9 AB             -         3  79.8  15       2
10 AB             -         4  84.8  17.4     3
11 B              +         2  77.8  16.4     1
12 B              +         5  83.8  14.6     2
13 B              -         1  74.5  14.9     1
14 B              -         3  85.1  16.2     2
15 B              -         4  83.3  16.6     3
16 O              +         1  80.3  15       1
17 O              +         3  78.9  14.8     2
18 O              +         4  81.2  14.9     3
19 O              +         5  84.9  15       4
20 O              -         2  80.7  16.1     1

Como puede observar el problema no se ha corregido.

Para conrregirlo podemos o incluir el ungroup desde el inicio cuando creamos el objeto por_dia, o aplicar el cambio y guardarlo en el objeto:

R

#ahora estamos almacenando el desagrupamiento
por_dia_sin_grupo <- por_dia %>% ungroup()

por_dia_sin_grupo %>% mutate(id = row_number())

SALIDA

# A tibble: 20 × 6
   tipo_sanguineo rh      dia   f_l   f_r    id
   <chr>          <chr> <int> <dbl> <dbl> <int>
 1 A              +         1  76.3  15.2     1
 2 A              +         3  81.5  16.6     2
 3 A              +         4  81.2  15.6     3
 4 A              +         5  81    15.9     4
 5 A              -         2  78.3  16.2     5
 6 AB             +         2  79.3  16       6
 7 AB             +         5  73.1  17.4     7
 8 AB             -         1  83    16.6     8
 9 AB             -         3  79.8  15       9
10 AB             -         4  84.8  17.4    10
11 B              +         2  77.8  16.4    11
12 B              +         5  83.8  14.6    12
13 B              -         1  74.5  14.9    13
14 B              -         3  85.1  16.2    14
15 B              -         4  83.3  16.6    15
16 O              +         1  80.3  15      16
17 O              +         3  78.9  14.8    17
18 O              +         4  81.2  14.9    18
19 O              +         5  84.9  15      19
20 O              -         2  80.7  16.1    20

Como puede observar ahora si tenemos cada fila con su propio id.

Advertencia: Es importante aclarar que el desagrupamiento en los escenarios anteriores iría después de la operación, sin embargo, en este caso iría antes de la operación.

Cuando trato de crear un pdf en RMarkdown me sale error

Si el archivo sale correctamente en otros formatos a excepción de pdf. Una de las situaciones más frecuentes es que falte la instalación de LaTeX: RMarkdown necesita LaTeX para generar PDFs. Asegúrate de tener LaTeX instalado en tu sistema.

Para instalar LaTeX desde RStudio, puede usar el paquete TinyTeX:

R

install.packages("tinytex")
tinytex::install_tinytex()

Configure RStudio:

Vaya a Tools > Global Options > Sweave.

Asegúrese de que la opción “Typeset PDF” esté configurada para usar TinyTeX.

Material adicional que puede aportar a su aprendizaje:

Manejo de datos con Tidyverse y R:

https://www.youtube.com/watch?v=6STcQVX8Hk0

Puntos Clave

Si después de buscar en esta guía sus preguntas no encontro respuesta por favor diligencie el siguiente formulario Dudas por resolver

Contribuciones


  • José M. Velasco-España: Versión inicial

  • Andree Valle-Campos: Ediciones menores

  • Laura Gómez-Bermeo: Ediciones menores

  • Geraldine Gomez: Ediciones menores