1.1 Explicación

1.1.1 ¿Qué es R?

  • Lenguaje para el procesamiento y análisis estadístico de datos
  • Software Libre
  • Sintaxis Básica: R base
  • Sintaxis incremental1: El lenguaje se va ampliando por aportes de Universidades, investigadores/as, usuarios/as y empresas privadas, organizados en librerías (o paquetes)
  • Comunidad web muy grande para realizar preguntas y despejar dudas. Por ejemplo, en el caso de Buenos Aires contamos con R-Ladies Buenos Aires y RenBaires.
  • Gráficos con calidad de publicación

Uno de los entornos más cómodos para utilizar el lenguaje R es el programa R studio.

  • Rstudio es una empresa que produce productos asociados al lenguaje R, como el programa sobre el que corremos los comandos, y extensiones del lenguaje (librerías).

  • El programa es gratuito y se puede bajar de la página oficial

Pantalla Rstudio

Pantalla Rstudio

1.1.2 Lógica sintáctica.

1.1.2.1 Definición de objetos

Los Objetos/Elementos constituyen la categoría esencial del R. De hecho, todo en R es un objeto, y se almacena con un nombre específico que no debe poseer espacios. Un número, un vector, una función, la progresión de letras del abecedario, una base de datos, un gráfico, constituyen para R objetos de distinto tipo. Los objetos que vamos creando a medida que trabajamos pueden visualizarse en el panel derecho superior de la pantalla (el Environment).

El operador <- (Alt + Guión) sirve para definir un objeto. A la izquierda del <- debe ubicarse el nombre que tomará el elemento a crear. Del lado derecho debe ir la definición del mismo.

Por ejemplo, podemos crear el elemento A, cuyo valor será 1. Para esto, debemos correr el código presionando Ctrl + Enter, con el cursor ubicado en cualquier parte de la línea. Al definir un elemento, el mismo queda guardado en el ambiente del programa, y podrá ser utilizado posteriormente para observar su contenido o para realizar una operación con el mismo.

## [1] 1
## [1] 7

Al correr una linea con el nombre del objeto, la consola del programa nos muestra su contenido. Entre corchetes observamos el número de orden del elemento en cuestión. Si corremos una operación, la consola nos muestra el resultado de la misma.

El operador = es equivalente a <-, pero en la práctica no se utiliza para la definición de objetos.

## [1] 2

<- es un operador Unidireccional, es decir que:
A <- B implica que A va tomar como valor el contenido del objeto B, y no al revés.

## [1] 2
## [1] 2

1.1.3 R base

Con R base nos referimos a los comandos básicos que vienen incorporados en el R, sin necesidad de cargar librerías.

1.1.3.1 Operadores lógicos:

  • \(>\) (mayor a-)
  • \(>=\) (mayor o igual a-)
  • \(<\) (menor a-)
  • \(<=\) (menor o igual a-)
  • \(==\) (igual a-)
  • \(!=\) (distinto a-)
## [1] FALSE
## [1] FALSE
## [1] TRUE
## [1] TRUE
## [1] FALSE
## [1] TRUE
## [1] TRUE

Como muestra el último ejemplo, el resultado de una operación lógica puede almacenarse como el valor de un objeto.

1.1.3.2 Operadores aritméticos:

## [1] 11
## [1] -2
## [1] 2.4
## [1] 15

1.1.3.3 Funciones:

Las funciones son series de procedimientos estandarizados, que toman como imput determinados argumentos a fijar por el usuario, y devuelven un resultado acorde a la aplicación de dichos procedimientos. Su lógica de funcionamiento es:
funcion(argumento1 = arg1, argumento2 = arg2)

A lo largo del curso iremos viendo numerosas funciones, según lo requieran los distintos ejercicios. Sin embargo, veamos ahora algunos ejemplos para comprender su funcionamiento:

  • paste() : concatena una serie de caracteres, pudiendo indicarse cómo separar a cada uno de ellos
  • paste0(): concatena una serie de caracteres sin separar
  • sum(): suma de todos los elementos de un vector
  • mean() promedio aritmético de todos los elementos de un vector
## [1] "Pega estas 4 palabras"
## [1] "11**-2**2.4"
## [1] "11-22.4"
## [1] 1 2 3 4 5
## [1] 15
## [1] 3

1.1.3.4 Caracteres especiales

  • R es sensible a mayúsculas y minúsculas, tanto para los nombres de las variables, como para las funciones y parámetros.
  • Los espacios en blanco y los carriage return (enter) no son considerados por el lenguaje. Los podemos aprovechar para emprolijar el código y que la lectura sea más simple2.
  • El numeral # se utiliza para hacer comentarios. Todo lo que se escribe después del # no es interpretado por R. Se debe utilizar un # por cada línea de código que se desea anular

  • Los corchetes [] se utilizan para acceder a un objeto:
    • en un vector[n° orden]
    • en una tabla[fila, columna]
    • en una lista[n° elemento]
  • el signo $ también es un método de acceso. Particularmente, en los dataframes, nos permitira acceder a una determinada columna de una tabla

  • Los paréntesis() se utilizan en las funciones para definir los parámetros.

  • Las comas , se utilizan para separar los parametros al interior de una función.

1.1.4 Objetos:

Existe una gran cantidad de objetos distintos en R, en lo que resepcta al curso trabajaremos principalmente con 3 de ellos:

  • Valores
  • Vectores
  • Data Frames
  • Listas

1.1.4.1 Valores

Los valores y vectores pueden ser a su vez de distintas clases:

Numeric

## [1] "numeric"

Character

## [1] "Soy una concatenación de caracteres"
## [1] "character"

Factor

## [1] "factor"

La diferencia entre un character y un factor es que el último tiene solo algunos valores permitidos (levels), con un orden interno predefinido (el cual, por ejemplo, se respetará a la hora de realizar un gráfico)

1.1.4.2 Vectores

Para crear un vector utilizamos el comando c(), de combinar.

## [1] 1 3 4

Podemos sumarle 2 a cada elemento del vector anterior

## [1] 3 5 6

O sumarle 1 al primer elemento, 2 al segundo, y 3 al tercer elemento del vector anterior

## [1] 4 7 9

1:3 significa que queremos todos los números enteros desde 1 hasta 3.

Podemos crear un vector que contenga las palabras: “Carlos”, “Federico”, “Pedro”

## [1] "Carlos"   "Federico" "Pedro"

Para acceder a algún elemento del vector, podemos buscarlo por su número de orden, entre [ ]

## [1] "Federico"

Si nos interesa almacenar dicho valor, al buscarlo lo asignamos a un nuevo objeto, dándole el nombre que deseemos

## [1] "Federico"

Para borrar un objeto del ambiente de trabajo, utilizamos el comando rm()

## Error in eval(expr, envir, enclos): object 'elemento2' not found

También podemos cambiar el texto del segundo elemento de E, por el texto “Pablo”

## [1] "Carlos" "Pablo"  "Pedro"

1.1.5 Data Frames

Un Data Frame es una tabla de datos, donde cada columna representa una variable, y cada fila una observación.

Este objeto suele ser central en el proceso de trabajo, y suele ser la forma en que se cargan datos externos para trabajar en el ambiente de R, y en que se exportan los resultados de nuestros trabajo.

También se puede crear como la combinación de N vectores de igual tamaño. Por ejemplo, tomamos algunos valores del Indice de salarios

##   INDICE  FECHA                 GRUPO
## 1 100.00 Oct-16    Privado_Registrado
## 2 100.00 Oct-16               Público
## 3 100.00 Oct-16 Privado_No_Registrado
## 4 101.80 Nov-16    Privado_Registrado
## 5 101.20 Nov-16               Público
## 6 100.73 Nov-16 Privado_No_Registrado
## 7 102.90 Dic-16    Privado_Registrado
## 8 102.40 Dic-16               Público
## 9 103.20 Dic-16 Privado_No_Registrado

Tal como en un vector se ubica a los elementos mediante [ ], en un dataframe se obtienen sus elementos de la forma [fila, columna].

Otra opción es especificar la columna, mediante el operador $, y luego seleccionar dentro de esa columna el registro deseado mediante el número de orden.

## [1] Oct-16 Oct-16 Oct-16 Nov-16 Nov-16 Nov-16 Dic-16 Dic-16 Dic-16
## Levels: Dic-16 Nov-16 Oct-16
## [1] Oct-16
## Levels: Dic-16 Nov-16 Oct-16
## [1] Oct-16
## Levels: Dic-16 Nov-16 Oct-16

¿que pasa si hacemos Datos$FECHA[3,2] ?

## Error in `[.default`(Datos$FECHA, 3, 2): incorrect number of dimensions

Nótese que el último comando tiene un número incorrecto de dimensiones, porque estamos refiriendonos 2 veces a la columna FECHA.

Acorde a lo visto anteriormente, el acceso a los dataframes mediante [ ] puede utilizarse para realizar filtros sobre la base, especificando una condición para las filas. Por ejemplo, puedo utilizar los [ ] para conservar del dataframe Datos unicamente los registros con fecha de Diciembre 2016:

##   INDICE  FECHA                 GRUPO
## 7  102.9 Dic-16    Privado_Registrado
## 8  102.4 Dic-16               Público
## 9  103.2 Dic-16 Privado_No_Registrado

La lógica del paso anterior sería: Accedo al dataframe Datos, pidiendo únicamente conservar las filas (por eso la condición se ubica a la izquierda de la ,) que cumplan el requisito de pertenecer a la categoría “Dic-16” de la variable FECHA.

Aún más, podría aplicar el filtro y al mismo tiempo identificar una variable de interés para luego realizar un cálculo sobre aquella. Por ejemplo, podría calcular la media de los indices en el mes de Diciembre.

## [1] 102.9 102.4 103.2
## [1] 102.8333
## [1] 102.8333

La lógica de esta sintaxis sería: “Me quedo con la variable INDICE, cuando la variable FECHA sea igual a "Dic-16", luego calculo la media de dichos valores”.

1.1.6 Listas

Contienen una concatenación de objetos de cualquier tipo. Así como un vector contiene valores, un dataframe contiene vectores, una lista puede contener dataframes, pero también vectores, o valores, y todo ello a la vez.

## [[1]]
## [1] Soy un factor, con niveles fijos
## Levels: Soy un factor, con niveles fijos
## 
## [[2]]
## [1] -2
## 
## [[3]]
## [1] 3 5 6
## 
## [[4]]
## [1] 4 7 9
## 
## [[5]]
## [1] "Carlos" "Pablo"  "Pedro" 
## 
## [[6]]
## [1] "Oct-16" "Oct-16" "Oct-16" "Nov-16" "Nov-16" "Nov-16" "Dic-16" "Dic-16"
## [9] "Dic-16"
## 
## $DF
##   INDICE  FECHA                 GRUPO
## 1 100.00 Oct-16    Privado_Registrado
## 2 100.00 Oct-16               Público
## 3 100.00 Oct-16 Privado_No_Registrado
## 4 101.80 Nov-16    Privado_Registrado
## 5 101.20 Nov-16               Público
## 6 100.73 Nov-16 Privado_No_Registrado
## 7 102.90 Dic-16    Privado_Registrado
## 8 102.40 Dic-16               Público
## 9 103.20 Dic-16 Privado_No_Registrado
## 
## [[8]]
## [1] 100.00 100.00 100.00 101.80 101.20 100.73 102.90 102.40 103.20
## 
## [[9]]
## [1] "Privado_Registrado"    "Público"               "Privado_No_Registrado"
## [4] "Privado_Registrado"    "Público"               "Privado_No_Registrado"
## [7] "Privado_Registrado"    "Público"               "Privado_No_Registrado"

Para acceder un elemento de una lista, podemos utilizar el operador $, que se puede usar a su vez de forma iterativa.

## [1] Oct-16
## Levels: Dic-16 Nov-16 Oct-16

1.1.7 Ambientes de trabajo

Hay algunas cosas que tenemos que tener en cuenta respecto del orden del ambiente en el que trabajamos:

  • Working Directory: Es el directorio de trabajo. Pueden ver el suyo con getwd(), es hacia donde apunta el código, por ejemplo, si quieren leer un archivo, la ruta del archivo tiene que estar explicitada como el recorrido desde el Working Directory.
  • Environment: Esto engloba tanto la información que tenemos cargada en Data y Values, como las librerías que tenemos cargadas mientras trabajamos.

Es importante que mantengamos bien delimitadas estas cosas entre diferentes trabajos, sino:

  1. El directorio queda referido a un lugar específico en nuestra computadora.
  • Si se lo compartimos a otro se rompe
  • Si cambiamos de computadora se rompe
  • Si lo cambiamos de lugar se rompe
  • Si primero abrimos otro script se rompe
  1. Tenemos mezclados resultados de diferentes trabajos:
  • Nunca sabemos si esa variable/tabla/lista se creo en ese script y no otro
  • Perdemos espacio de la memoria
  • No estamos seguros de que el script cargue todas las librerías que necesita

Rstudio tiene una herramienta muy útil de trabajo que son los proyectos. Estos permiten mantener un ambiente de trabajo delimitado por cada uno de nuestros trabajos. Es decir:

  • El directorio de trabajo se refiere a donde esta ubicado el archivo .Rproj
  • El Environment es específico de nuestro proyecto.

Un proyecto no es un sólo script, sino toda una carpeta de trabajo.

logo Rpoject

logo Rpoject

Para crearlo, vamos al logo de nuevo projecto (Arriba a la derecha de la panatalla), y elegimos la carpeta de trabajo.

1.1.8 Tipos de archivos de R

  • Script: Es un archivo de texto plano, donde podemos poner el código que utilizamos para preservarlo
  • Rnotebook: También sirve para guardar el código, pero a diferencia de los scripts, se puede compilar, e intercalar código con resultados
  • Rproject: Es un archivo que define la metadata del proyecto
  • RDS y Rdata: Dos formatos de archivos propios de R para guardar datos.

  1. Más allá de los comandos elementales, comandos más sofisticados tienen muchas versiones, y algunas quedan en desuso en el tiempo.

  2. veremos que existen ciertas excepciones con algunos paquetes más adelante.