Tema 2 Primeros pasos

En este primer tema vamos a ver algunas utilidades generales del entorno R usando RStudio, tales como la ejecución de órdenes en la consola, la obtención de ayuda y la instalación y uso de paquetes.

2.1 Ejecución de órdenes en la consola

Para ejecutar órdenes en la consola teclea la expresión deseada y pulsa Enter.

2+3
## [1] 5

Observa que la salida viene precedida por [1]. Para esta salida este valor no es muy útil, pero sí lo es cuando la salida produce un resultado que abarca varias líneas. Por ejemplo:

(1:40) ^ 2
##  [1]    1    4    9   16   25   36   49   64   81  100  121  144  169  196  225
## [16]  256  289  324  361  400  441  484  529  576  625  676  729  784  841  900
## [31]  961 1024 1089 1156 1225 1296 1369 1444 1521 1600

Esto produce los números del 1 al 40 elevados al cuadrado. Cada línea viene precedida por el ordinal del primer valor de la línea en el conjunto de datos de salida. Por ejemplo, si una línea comienza con [14] eso indica que el primer valor en esa línea ocupa el puesto 14 de los valores que aparecen en la salida.

Cuando se escribe en la consola, se puede utilizar las flechas hacia arriba y abajo para recuperar las distintas órdenes tecleadas. Pruébalo, es realmente útil. También es cómodo usar la pestaña History del panel superior derecho para visualizar las órdenes tecleadas previamente. Si pinchamos en una orden aparece resaltada y se puede usar las opciones To Console o To Source para enviar la orden a la consola o al archivo de texto que estemos editando respectivamente. Pruébalo, a veces evita el tener que volver a teclear una orden larga escrita con anterioridad.

Observa que en la consola aparece el símbolo >. Este símbolo es el indicador o prompt. Indica que el sistema está listo para recibir órdenes. Teclea una orden incompleta como 7 * y pulsa Enter. El indicador cambia al símbolo +. Este símbolo nos indica que la línea previa era incompleta y está esperando el final de la entrada. Escribe 5, por ejemplo, y pulsa Enter, se obtendrá el valor 35. Si cuando aparece el indicador + deseas abortar la orden que estabas escribiendo, en lugar de completarla, pulsa Escape.

2.2 Ayuda

Uno de los aspectos sobresalientes de R es su sistema de ayuda. Se puede pedir ayuda sobre cualquier función, paquete, instrucción, conjunto de datos, etc. Para ello hay que usar la función help:

help("mean") # ayuda sobre la función mean

Si estamos en RStudio, la ayuda aparece en la pestaña Help del panel inferior derecho. Para obtener ayuda, también se puede usar la interrogación:

?var

La ayuda sobre funciones incluye descripciones de sus parámetros de entrada y valor de retorno. La última parte de la ayuda (examples) es muy interesante, pues incluye ejemplos de uso de la función. Estos ejemplos se pueden ejecutar en la consola con la función example:

example(seq)

A lo largo de estos apuntes vamos a estudiar muchas funciones de R. Normalmente describiremos los usos más comunes de una función. Sin embargo, hay funciones muy flexibles que realizan cálculos muy variados en función de cómo se las invoque. Por ello te animamos a que uses la ayuda para obtener una descripción completa de las funciones que te interesen. Prueba, por ejemplo, help("help") para obtener una descripción más detallada del funcionamiento de la propia función help.

Aparte de esta ayuda, y de la que se explica a continuación, una búsqueda en internet usando unos términos significativos, preferiblemente en inglés, suele producir ayuda de gran calidad en lugares como stackoverflow.

2.2.1 Vignettes

Los paquetes de R están obligados a incluir documentación sobre sus funciones y conjuntos de datos. Sin embargo, a veces es difícil entender la utilidad de un paquete viendo la documentación de sus funciones de forma aislada. Es por ello que algunos paquetes incluyen vignettes, que son documentos que explican en detalle la funcionalidad de un paquete combinando sus distintas funciones para, por ejemplo, resolver un problema. Un paquete puede contener varias vignettes. Para consultarlas desde la consola de R se puede usar la función vignette.

vignette("grid")

Si ejecutas la orden previa desde la consola, se abrirá un archivo pdf con información sobre el sistema gráfico grid.

2.2.2 Demos

La tercera utilidad que nos ofrece R para aprender a usar sus recursos son las demostraciones, es decir, ejemplos prácticos en los que se muestran los resultados de utilizar ciertas funciones. Muchos paquetes incorporan demostraciones bastante elaboradas sobre su funcionalidad, especialmente los paquetes que sirven para generar gráficos.

Como ejemplo, ejecuta la siguiente orden en la consola y verás una demostración de las posibilidades gráficas de R (los gráficos aparecerán en la pestaña Plots del panel inferior derecho):

demo(graphics)

2.3 Paquetes

El núcleo base de R viene constituido por una serie de paquetes que se incluyen en la instalación de R. Este núcleo base incorpora un gran abanico de funcionalidades con las que podemos cargar datos de fuentes externas, llevar a cabo análisis estadísticos y obtener representaciones gráficas. Las funcionalidades de los paquetes del núcleo base están disponibles al ejecutar RStudio. No obstante, hay multitud de tareas para las que necesitaremos recurrir a paquetes externos al núcleo base, y necesitaremos incorporar al entorno de trabajo las funciones y objetos definidos en ellos. Algunos de esos paquetes ya se encontrarán instalados en el sistema, pero otros será preciso descargarlos e instalarlos conforme se vayan necesitando. Una de las grandes ventajas de R es la gran comunidad de programadores que desarrolla paquetes para compartirlos con el resto. Además, comparado con otros sistemas, la instalación de paquetes es muy sencilla.

Un paquete es un conjunto de funciones y datos listos para ser distribuidos e instalados. De cara a instalar un paquete hay varias posibilidades. Una de ellas es usar la pestaña Packages del panel inferior derecho. Mediante esta pestaña podemos consultar los paquetes que tenemos instalados, ver su documentación e instalar nuevos paquetes. Otra posibilidad es usar la función install_packages. Por ejemplo, la siguiente orden instala el paquete tsfknn.

install.packages("tsfknn")

La función install_packages descarga de Internet e instala un paquete de CRAN, que es el repositorio oficial de paquetes de R.

2.3.1 Carga de paquetes

Para poder usar un objeto (función, constante, conjunto de datos, …) de un paquete es necesario tener instalado el paquete; pero no sólo eso, también hay que cargar el paquete, para que los objetos que contiene sean accesibles. Podemos consultar los paquetes cargados con la función search.

search()
## [1] ".GlobalEnv"        "package:stats"     "package:graphics" 
## [4] "package:grDevices" "package:utils"     "package:datasets" 
## [7] "package:methods"   "Autoloads"         "package:base"

Para cargar un paquete y tener acceso a sus objetos hay que usar la función library. Por ejemplo:

library(tsfknn)

Ahora podemos usar las funciones del paquete tsfknn, que, dada una serie temporal, predice su comportamiento futuro.

pred <- knn_forecasting(USAccDeaths, h = 12, lags = 1:12)
plot(pred)

Podemos comprobar que el paquete se ha cargado usando de nuevo la función search:

search()
##  [1] ".GlobalEnv"        "package:tsfknn"    "package:stats"    
##  [4] "package:graphics"  "package:grDevices" "package:utils"    
##  [7] "package:datasets"  "package:methods"   "Autoloads"        
## [10] "package:base"

Ahora el paquete tsfknn aparece en segundo lugar.

Como puede observarse, hay una serie de paquetes, como graphics, utils, stats o base, que no hemos cargado con library y, sin embargo, están cargados. Estos se corresponden con los paquetes del núcleo base de R y se cargan automáticamente. Estos paquetes incluyen funciones básicas para realizar cálculos y análisis estadísticos.

2.3.2 Conflictos de nombres

A veces más de un paquete puede contener un objeto con el mismo nombre. Esto provoca un conflicto de nombres porque, cuando usamos un nombre definido en más de un paquete, ¿a qué objeto nos referimos?. R lo resuelve usando el objeto del último paquete que ha sido cargado, que será el primero de los paquetes en conflicto que aparezca en el listado producido por la función search.

Vamos a ejemplificar un conflicto de nombres sin necesidad de usar dos paquetes. La función mean, del paquete base del núcleo de R, calcula la media de los valores de un vector:

mean(c(2, 7, 10))  # media del vector [2, 7, 10]
## [1] 6.333333

Sin embargo, a continuación vamos a escribir una función llamada mean que siempre produce el valor 5.

mean <- function(x) 5

Ahora, esta nueva función oculta a la función original del paquete base:

mean(c(2, 7, 10))
## [1] 5

Cuando haya conflictos de nombres, siempre podemos usar la siguiente sintaxis para evitar el conflicto: nombrePaquete::objeto. Es decir, precedemos el nombre del objeto con el nombre del paquete en el que se ubica y dos ocurrencias del carácter :. Esto evita cualquier conflicto, pues no puede haber dos paquetes con el mismo nombre.

mean(c(2, 7, 10))        # invoca a la función que hemos definido
## [1] 5
base::mean(c(2, 7, 10))  # invoca a la función mean del paquete base
## [1] 6.333333

La sintaxis nombrePaquete::objeto también es útil para usar un objeto de un paquete sin necesidad de cargar previamente el paquete con library.

2.4 Ejercicios

  1. Usa la función help para descubrir la utilidad de la función sqrt. Usa sqrt para realizar algún cálculo.

  2. Genera una vignette del paquete tsfknn.

  3. Instala el paquete dlstats, que sirve para consultar estadísticas sobre las veces que los usuarios instalan determinados paquetes en RStudio. Carga el paquete y obtén ayuda de la función cran_stats. Utiliza la función cran_stats para consultar un histórico de cuántas veces al mes se ha descargado el paquete tsfknn.

  4. Ejecuta el código autoexplicativo de más abajo. El efecto es que la nueva variable oculta a la constante pi, definida en el paquete base. Añade una línea al final del código de forma que se pueda volver a consultar el valor de la constante \(\pi\).

    pi       # consulta el valor de la constante pi
    ## [1] 3.141593
    pi <- 0  # variable que pone pi a cero (oculta a la otra)
    pi       # consulta la variable que vale 0
    ## [1] 0

2.5 Soluciones

# Función sqrt
help("sqrt")
sqrt(25)
# Vignette del paquete tsfknn
vignette("tsfknn")
# Instalación y uso del paquete dlstats
install.packages("dlstats")  # se instala
library(dlstats)             # se carga
help("cran_stats")
cran_stats("tsfknn")
# Ocultación del objeto pi del paquete base
pi
## [1] 0
pi <- 0
pi
## [1] 0
base::pi
## [1] 3.141593