Puntos Clave
Introducción a R y RStudio |
|
Gestión de proyectos con RStudio |
|
Buscando ayuda |
|
Estructuras de datos |
|
Explorando data frames |
|
Haciendo subconjuntos de datos |
|
Control de flujo |
|
Creando gráficas con calidad para publicación con ggplot2 |
|
Vectorización |
|
Funciones |
|
Guardando datos |
|
División y combinación de data frames con plyr |
|
Manipulación de data frames con dplyr |
|
Manipulación de data frames usando tidyr |
|
Produciendo informes con knitr |
|
Escribiendo buen software |
|
Referencia
Introducción a R y RStudio
- Usa la tecla escape para cancelar comandos incompletos o código en ejecución (Ctrl+C) si estas usando R desde el shell.
- Las operaciones aritméticas básicas siguen el orden estándar de precedencia:
- Paréntesis:
(
,)
- Exponentes:
^
or**
- División:
/
- Multiplicación:
*
- Suma:
+
- Resta:
-
- Paréntesis:
- La notación científica está disponible, por ejemplo:
2e-3
- Cualquier cosa a la derecha de
#
es un comentario, R lo ignorará! - Las funciones se denotan por
function_name()
. Las expresiones dentro de los paréntesis se evaluan antes de pasarse a la función, y las funciones se pueden anidar. - Funciones matemáticas:
exp
,sin
,log
,log10
,log2
etc. - Operadores de comparación:
<
,<=
,>
,>=
,==
,!=
- Usa
all.equal
para comparar valores numéricos! <-
es el operador de asignación. Cualquier expresión a la derecha del operador es evaluada, luego se almacena en la variable nombrada a la izquierda.ls
lista todas las variables y funciones que has creadorm
puede utilizarse para borrarlas- Al asignar valores a los argumentos de la función, debes usar
=
.
Manejo de proyectos con RStudio
- Para crear un nuevo proyecto, ve a File -> New Project
- Instala el paquete
packrat
para crear proyectos independientes install.packages
para instalar paquetes desde CRANlibrary
para cargar un paquete en Rpackrat::status
para verificar si se han instalado todos los paquetes a los que se hace referencia en tus scripts.
Buscando ayuda
- Para acceder a la ayuda de una función
?function_name
ohelp(function_name)
- Usa comillas para operadores especiales, por ejemplo:
?"+"
- Utiliza la búsqueda ambigua si no puedes recordar un nombre
??search_term
- CRAN task views son un buen punto de partida.
- Stack Overflow es un buen lugar para obtener ayuda con tu código.
?dput
Guardará datos que estás trabajando, para que otros puedan cargarlos fácilmente.sessionInfo()
te dará detalles de tu configuración.
Estructuras de datos
Los valores atómicos en R deben ser de alguno de los 5 tipos de datos, múltiples valores se pueden agrupar en estructuras de datos.
Tipos de datos
typeof(object)
proporciona información sobre el tipo de dato de un objeto.- Existen 5 tipos de datos principales:
?numeric
números reales(decimal)?integer
sólo números enteros?character
texto?complex
números complejos?logical
valores TRUE o FALSE
Tipos especiales:
?NA
valores faltantes?NaN
“no es número” para valores indefinidos (por ejemplo,0/0
).?Inf
,-Inf
infinito.?NULL
una estructura de datos que no existe
NA
puede ocurrir en cualquier vector atómico.NaN
, andInf
sólo pueden aparecer en vectores de tipo complex, integer o numeric. Los vectores atómicos son los bloques de construcción para todas las demás estructuras de datos. Un valorNULL
ocurrirá en una estructura de datos entera (pero puede ocurrir como lista de elementos).
Estructuras de datos básicas en R:
?vector
atómico (sólo puede contener un tipo de dato)?list
(contenedores para otros objetos)?data.frame
objetos bidimensionales cuyas columnas pueden contener diferentes tipos de datos?matrix
objeto bidimensional que puede contener sólo un tipo de dato.?factor
vectores que contienen datos categóricos predefinidos.?array
objeto multi-dimensional que puede contener sólo un tipo de dato.
Recuerda que las matrices son realmente vectores atómicos, y que los data.frames son realmente listas(esto explica algunos de los comportamientos extraños de R).
?vector()
Todos los elementos del vector deben ser del mismo tipo.- Los elementos se pueden convertir de un tipo a otro utilizando coerción.
- La función concatenar ‘c()’ agrega elementos al vector.
seq(from=0, to=1, by=1)
crea una secuencia de números.- Los elementos de un vector se pueden nombrar usando la función
names()
.
?factor()
Los factores son una estructura de datos diseñada para almacenar datos categóricos.levels()
muestra los valores válidos que se pueden almacenar en un vector de tipo factor.
?list()
Las listas son una estructura de datos diseñada para almacenar datos de diferente tipos.
?matrix()
Las matrices son una estructura de datos diseñada para almacenar datos bidimensionales.
?data.frame
es una estructura de datos clave. Es unalista
devectores
.cbind()
agregará una columna (vector) a un data.frame.rbind()
agregará un renglón (list) a un data.frame.
Funciones útiles para consultar estructuras de datos:
?str
estructura, imprime un resumen de toda la estructura de datos?typeof
te dice el tipo dentro de un vector atómico?class
Indica cual es la estructura de datos?head
Imprime los primerosn
elementos (filas para objetos bidimensionales)?tail
imprime los últimosn
elementos (filas para objetos bidimensionales)?rownames
,?colnames
,?dimnames
recupera o modifica los nombres de fila y columna de un objeto.?names
recupera o modifica los nombres de un vector o lista atómica (o columnas de un dataframe).?length
obtiene el número de elementos de un vector atómico?nrow
,?ncol
,?dim
obtiene las dimensiones de un objeto n-dimensional (No funcionará en vectores o listas atómicas).
Explorando Dataframes
read.csv
para leer datos en una estructura regularsep
argumento para especificar el separador- ”,” para valores separados por coma
- “\t” para valores separados por tabulador
- Otros argumentos:
header=TRUE
si hay una fila de encabezado
Subconjunto de datos
- Se puede acceder a los elementos por:
- Indice
- Nombre
- Vectores lógicos
[
corchetes:- extrae elementos individuales o subset de vectores
- por ejemplo,
x[1]
extrae el primer elemento del vector x. - extrae elementos individuales de una lista. El valor devuelto será otra
list()
. - extrae columnas de un data.frame.
[
con dos argumentos para:- extrae filas y/o columnas de
- matrices
- data.frames
- por ejemplo:
x[1,2]
extraerá el valor de la fila 1, columna 2. - por ejemplo:
x[2,:]
extraerá toda la segunda fila.
- extrae filas y/o columnas de
[[
dobles corchetes para extraer elementos de las listas.$
para acceder a columnas o listar elementos por nombre- índices negativos omiten elementos
Control de flujo
- Usa la condición
if
para iniciar una instrucción condicional,else if
para proporcionar pruebas adicionales, yelse
para proporcionar un valor predeterminado. - Las instrucciones que se encuentran entre las llaves de las declaraciones condicionales deben estar indentadas.
- Usa
==
para probar la igualdad. X && Y
sólo es cierto si tanto X como Y sonTRUE
.X || Y
es cierto si ya sea X o Y, o ambos, sonTRUE
.- Cero se considera
FALSE
; todos los demás números se consideranTRUE
- Anidar loops para operar en datos multidimensionales.
Creación de gráficos con calidad para publicación
- las figuras se pueden crear con la gramática de los gráficos:
library(ggplot2)
ggplot
para crear la figura baseaes
especifica la estética de los ejes de datos, la forma, color y tamañogeom
especifica el tipo de gráfico, por ejemplo,point
,line
,density
,box
geom
agrega también transformaciones estadísticas, por ejemplo.geom_smooth
scale
funciones que controla la relación entre los valores de los datos y los valores visuales o estéticosfacet
funciones para estratificar la figura en panelesaes
Las características estéticas se aplican a capas individuales, o se pueden establecer para todo el gráfico dentro deggplot
.theme
cambia el aspecto general del gráfico- ¡El orden de las capas importa!
ggsave
salva una figura.
Vectorización
- La mayoría de las funciones y operaciones se aplican a cada elemento de un vector
*
la multiplicación de elemento a elemento%*%
para una verdadera multiplicación de matricesany()
regresaráTRUE
si cualquier elemento de un vector esTRUE
all()
regresaráTRUE
si todos los elementos de un vector sonTRUE
Funciones
?"function"
- Coloque el código cuyos parámetros cambian frecuentemente en una función, luego llámelo con diferentes valores de parámetros para personalizar su comportamiento.
- Se devuelve la última línea de una función, o puede usar
return
explícitamente - Cualquier código escrito en el cuerpo de la función buscará preferiblemente variables definidas dentro de la función
- Documente ¿por qué?, luego ¿qué?, y finalmente ¿cómo? (si el código no se explica por sí mismo)
Escribiendo datos
write.table
para escribir objetos en formato regular- asigna
quote = FALSE
para que el texto no sea envuelto entre comillas ` “`
Split-apply-combine
- Use la familia de funciones
xxply
para aplicar funciones a grupos dentro de algunos datos. - la primera letra,
a
rray,d
ata.frame ol
ist corresponde a los datos de entrada - la segunda letra denota la estructura de datos de salida
- Las funciones anónimas (aquellas que no tienen un nombre asignado) se usan dentro de la familia de funciones
plyr
en grupos dentro de los datos.
Manejo de dataframe con dplyr
library(dplyr)
?select
extrae variables por nombre.?filter
regresa filas que coincidan con las condiciones.?group_by
agrupa datos por una de muchas variables.?summarize
resume valores múltiples a un solo valor.?mutate
agrega nuevas variables a un data.frame.- Combina operaciones usando el operador pipe
?"%>%"
.
Manejo de dataframe con tidyr
library(tidyr)
- ‘?gather’ convierte datos del formato ancho al largo.
- ‘?spread’ convierte datos del formato largo al ancho.
- ‘?separate’ separa un único valor en múltiples valores.
- ‘?unite’ fusionar valores múltiples en un solo valor.
Generando reportes con knitr
- Valor de informes reproducibles
- Conceptos básicos de Markdown
- fragmentos de código R
- Opciones de fragmentos
- Código R en línea
- Otros formatos de salida
Buenas prácticas para escribir un buen código
- Programa defensivamente, es decir, asume que van a surgir errores y escribe el código para detectarlos cuando surjan.
- Escriba pruebas antes de escribir el código para ayudar a determinar exactamente qué se supone que debe hacer ese código.
- Conoce que se supone hace el código, antes de tratar de corregirlo.
- Haz que falle cada vez.
- Haz que falle rápido.
- Cambia una cosa a la vez, y por una razón.
- Ten un registro de lo que has hecho.
- Se humilde.
Glosario
- argument
- Un valor dado a una función o programa cuando se ejecuta. El término a menudo se usa indistintamente (y de manera inconsistente) con parámetro.
- assign
- Para darle a un valor un nombre asociandolo a una variable.
- body
- (de una función): las instrucciones que se ejecutan cuando se ejecuta una función.
- comment
- Una observación en un programa que pretende ayudar a los lectores humanos a comprender lo que está sucediendo,
pero es ignorado por la computadora.
Los comentarios en Python, R y el shell de Unix comienzan con un caracter
#
y se ejecutan hasta el final de la linea; los comentarios en SQL comienzan con--
, y otros idiomas tienen otras convenciones. - comma-separated values
- (CSV) Una representación textual común para tablas en el cual los valores en cada fila están separados por comas.
- delimiter
- Un caracter or caracteres usados para separar valores individuales, tales como las comas entre columnas en un archivo CSV.
- documentation
- Texto en lenguaje humano escrito para explicar lo que hace el software cómo funciona, o cómo usarlo.
- floating-point number
- Un número que contiene una parte fraccionaria y un exponente. Ver también: integer.
- for loop
- Un ciclo que se ejecuta una vez para cada valor en algún tipo de conjunto, lista o rango. Ver también: while loop.
- index
- Un subíndice que especifica la ubicación de un único valor en una colección, como un solo píxel en una imagen.
- integer
- Un número entero, como -12343. Ver también: floating-point number.
- library
- En R, es el directorio(s) donde los paquetes son almacenados.
- package
- Una colección de funciones R, datos y código compilado en un formato bien definido. Los paquetes se almacenan en una biblioteca y se cargan usando la función de library().
- parameter
- Nombre de variable en la declaración de la función que se usa para guardar un valor cuando la función es llamada. El término a menudo se usa indistintamente (y de manera inconsistente) con argumento.
- return statement
- Una declaración que hace que una función deje de ejecutarse y devuelva un valor en donde fue llamada.
- sequence
- Una colección de información que se presenta en un orden específico.
- shape
- Las dimensiones de una matriz, representadas como un vector.
Por ejemplo, una forma de matriz de 5 × 3 es
(5,3)
. - string
- Abreviatura de “cadena de caracteres”, una secuencia de cero o más caracteres.
- syntax error
- Un error de programación que ocurre cuando las instrucciones están en un orden o contienen caracteres no esperados por el lenguaje de programación.
- type
- La clasificación de algo en un programa (por ejemplo, el contenido de una variable) como un tipo de número (por ejemplo floating-point, integer), string, o algo más. En R el comando typeof() se usa para consultar el tipo de una variable.
- while loop
- Un bucle que se ejecuta siempre que una condición dada sea verdadera. Ver también: for loop.