Вы находитесь на странице: 1из 12

1 Introducción

La ciencia de los datos es una disciplina emocionante que le permite convertir


los datos sin procesar en comprensión, conocimiento y conocimiento. El objetivo
de "R for Data Science" es ayudarlo a aprender las herramientas más
importantes de R que le permitirán realizar data science. Después de leer este
libro, tendrá las herramientas para enfrentar una amplia variedad de desafíos de
la ciencia de datos, utilizando las mejores partes de R.

1.1 Lo que aprenderás


La ciencia de los datos es un campo enorme, y no hay forma de dominarla
leyendo un solo libro. El objetivo de este libro es brindarle una base sólida en
las herramientas más importantes. Nuestro modelo de las herramientas
necesarias en un proyecto típico de ciencia de datos se parece a esto:

Primero debe importar sus datos a R. Esto generalmente significa que toma
datos almacenados en un archivo, base de datos o API web y los carga en un
marco de datos en R. Si no puede obtener sus datos en R, puede No hagas
ciencia de datos en ello!

Una vez que haya importado sus datos, es una buena idea ordenarlos . Poner
en orden sus datos significa almacenarlos en una forma consistente que
coincida con la semántica del conjunto de datos con la forma en que se
almacena. En resumen, cuando sus datos están ordenados, cada columna es
una variable y cada fila es una observación. Los datos ordenados son
importantes porque la estructura consistente le permite enfocar su lucha en las
preguntas sobre los datos, no luchar para obtener los datos en la forma correcta
para diferentes funciones.
Una vez que tenga datos ordenados, un primer paso común
es transformarlos . La transformación incluye reducir las observaciones de
interés (como todas las personas en una ciudad o todos los datos del año
pasado), crear nuevas variables que son funciones de variables existentes
(como calcular la velocidad a partir de la velocidad y el tiempo) y calcular un
conjunto de resumen Estadísticas (como cuentas o medios). En conjunto, el
ordenamiento y la transformación se denominan disputas , porque poner sus
datos en una forma en la que es natural trabajar a menudo se siente como una
pelea.

Una vez que tenga datos ordenados con las variables que necesita, hay dos
motores principales de generación de conocimiento: visualización y
modelado. Estas tienen fortalezas y debilidades complementarias, por lo que
cualquier análisis real se repetirá entre ellas muchas veces.

La visualización es una actividad fundamentalmente humana. Una buena


visualización le mostrará cosas que no esperaba o le generará nuevas
preguntas sobre los datos. Una buena visualización también puede sugerir que
está haciendo la pregunta incorrecta o que necesita recopilar datos
diferentes. Las visualizaciones pueden sorprenderlo, pero no escalar
particularmente bien porque requieren un humano para interpretarlas.

Los modelos son herramientas complementarias a la visualización. Una vez


que haya hecho sus preguntas lo suficientemente precisas, puede usar un
modelo para responderlas. Los modelos son una herramienta fundamentalmente
matemática o computacional, por lo que generalmente se escalan bien. Incluso
cuando no lo hacen, ¡es generalmente más barato comprar más computadoras
que comprar más cerebros! Pero cada modelo hace suposiciones y, por su
propia naturaleza, un modelo no puede cuestionar sus propias
suposiciones. Eso significa que un modelo no puede sorprenderte
fundamentalmente.

El último paso de la ciencia de datos es la comunicación , una parte


absolutamente crítica de cualquier proyecto de análisis de datos. No importa
qué tan bien sus modelos y visualización lo hayan llevado a comprender los
datos, a menos que también pueda comunicar sus resultados a otros.
Rodeando todas estas herramientas está la programación . La programación
es una herramienta transversal que se utiliza en cada parte del proyecto. No es
necesario ser un programador experto para ser un científico de datos, pero
aprender más sobre programación vale la pena porque convertirse en un mejor
programador le permite automatizar tareas comunes y resolver nuevos
problemas con mayor facilidad.

Utilizará estas herramientas en cada proyecto de ciencia de datos, pero para la


mayoría de los proyectos no son suficientes. Hay una regla aproximada de 80-
20 en juego; puede abordar aproximadamente el 80% de cada proyecto
utilizando las herramientas que aprenderá en este libro, pero necesitará otras
herramientas para abordar el 20% restante. A lo largo de este libro, le
indicaremos recursos donde puede obtener más información.
1.2 Cómo está organizado este libro
La descripción anterior de las herramientas de la ciencia de datos se organiza
aproximadamente de acuerdo con el orden en el que las usa en un análisis
(aunque, por supuesto, las repetirá varias veces). En nuestra experiencia, sin
embargo, esta no es la mejor manera de aprenderlos:

 Comenzar con la ingesta de datos y ordenar es subóptimo porque el 80% del


tiempo es rutinario y aburrido, y el otro 20% del tiempo es extraño y
frustrante. ¡Es un mal lugar para empezar a aprender un nuevo tema! En su
lugar, comenzaremos con la visualización y transformación de los datos que ya
se han importado y ordenado. De esa manera, cuando ingieres y ordenas tus
propios datos, tu motivación se mantendrá alta porque sabes que el dolor vale la
pena.

 Algunos temas se explican mejor con otras herramientas. Por ejemplo, creemos
que es más fácil entender cómo funcionan los modelos si ya conoce la
visualización, los datos ordenados y la programación.

 Las herramientas de programación no son necesariamente interesantes por sí


mismas, pero le permiten abordar problemas mucho más difíciles. Le daremos
una selección de herramientas de programación en el centro del libro, y luego
verá cómo pueden combinarse con las herramientas de ciencia de datos para
abordar problemas de modelado interesantes.

Dentro de cada capítulo, tratamos de mantener un patrón similar: comience con


algunos ejemplos motivadores para que pueda ver una imagen más grande y
luego sumérjase en los detalles. Cada sección del libro está emparejada con
ejercicios para ayudarte a practicar lo que has aprendido. Si bien es tentador
omitir los ejercicios, no hay mejor manera de aprender que practicar sobre
problemas reales.

1.3 Lo que no aprenderás


Hay algunos temas importantes que este libro no cubre. Creemos que es
importante mantenerse despiadadamente enfocado en lo esencial para que
pueda comenzar a trabajar lo más rápido posible. Eso significa que este libro no
puede cubrir todos los temas importantes.

1.3.1 Big data


Este libro se enfoca con orgullo en pequeños conjuntos de datos en
memoria. Este es el lugar adecuado para comenzar, ya que no puede abordar
Big Data a menos que tenga experiencia con Small Data. Las herramientas que
aprenda en este libro manejarán fácilmente cientos de megabytes de datos, y
con un poco de cuidado, normalmente pueden usarlos para trabajar con 1-2 Gb
de datos. Si está trabajando habitualmente con datos más grandes (10-100 Gb,
por ejemplo), debe aprender más sobre data.table . Este libro no enseña
data.table porque tiene una interfaz muy concisa que hace que sea más difícil
de aprender, ya que ofrece menos claves lingüísticas. Pero si está trabajando
con grandes volúmenes de datos, la rentabilidad del rendimiento vale la pena el
esfuerzo adicional requerido para aprenderlo.

Si sus datos son más grandes que esto, considere cuidadosamente si su


problema de big data podría ser realmente un problema de datos pequeños
disfrazado. Si bien los datos completos pueden ser grandes, a menudo los datos
necesarios para responder una pregunta específica son pequeños. Es posible
que pueda encontrar un subconjunto, una submuestra o un resumen que se
ajuste a la memoria y que aún le permita responder la pregunta que le interesa.
El desafío aquí es encontrar los datos pequeños correctos, que a menudo
requieren mucha iteración.

Otra posibilidad es que su problema de big data sea en realidad un gran número
de problemas de data pequeña. Cada problema individual puede caber en la
memoria, pero tienes millones de ellos. Por ejemplo, es posible que desee
ajustar un modelo a cada persona en su conjunto de datos. Eso sería trivial si
tuviera solo 10 o 100 personas, pero en cambio tiene un
millón. Afortunadamente, cada problema es independiente de los otros (una
configuración que a veces se denomina vergonzosamente paralela), por lo que
solo necesita un sistema (como Hadoop o Spark) que le permita enviar
diferentes conjuntos de datos a diferentes computadoras para su
procesamiento. Una vez que haya descubierto cómo responder a la pregunta
para un solo subconjunto con las herramientas descritas en este libro,
aprenderá nuevas herramientas como sparklyr, rhipe y ddr para resolverlo con el
conjunto de datos completo.

1.3.2 Python, Julia, y amigos


En este libro, no aprenderá nada acerca de Python, Julia o cualquier otro
lenguaje de programación útil para la ciencia de datos. Esto no es porque
creemos que estas herramientas son malas. ¡Ellos no están! Y en la práctica, la
mayoría de los equipos de ciencia de datos usan una combinación de idiomas, a
menudo al menos R y Python.

Sin embargo, creemos firmemente que es mejor dominar una herramienta a la


vez. Mejorará más rápido si se sumerge en profundidad, en lugar de extenderse
sobre muchos temas. Esto no significa que solo deba saber una cosa, solo que
generalmente aprenderá más rápido si se adhiere a una cosa a la vez. Debería
esforzarse por aprender cosas nuevas a lo largo de su carrera, pero asegúrese
de que su comprensión sea sólida antes de pasar a la siguiente cosa
interesante.
Creemos que R es un gran lugar para comenzar su viaje hacia la ciencia de la
información porque es un entorno diseñado desde cero para apoyar la ciencia
de la información. R no es solo un lenguaje de programación, sino que también
es un entorno interactivo para hacer ciencia de datos. Para apoyar la
interacción, R es un lenguaje mucho más flexible que muchos de sus
compañeros. Esta flexibilidad viene con sus desventajas, pero la gran ventaja es
lo fácil que es desarrollar gramáticas a medida para partes específicas del
proceso de la ciencia de datos. Estos mini idiomas lo ayudan a pensar en
problemas como científico de datos, al tiempo que respalda la interacción fluida
entre su cerebro y la computadora.

1.3.3 Datos no rectangulares


Este libro se enfoca exclusivamente en datos rectangulares: colecciones de
valores que están asociados con una variable y una observación. Hay muchos
conjuntos de datos que no encajan naturalmente en este paradigma: incluye
imágenes, sonidos, árboles y texto. Pero los marcos de datos rectangulares son
extremadamente comunes en la ciencia y la industria, y creemos que son un
gran lugar para comenzar su viaje de la ciencia de los datos.

1.3.4 Confirmación de hipótesis


Es posible dividir el análisis de datos en dos campos: generación de hipótesis y
confirmación de hipótesis (a veces llamado análisis confirmatorio). El enfoque
de este libro es descaradamente sobre la generación de hipótesis o la
exploración de datos. Aquí analizará en profundidad los datos y, en combinación
con su conocimiento del tema, generará muchas hipótesis interesantes para
ayudar a explicar por qué los datos se comportan de la manera en que lo
hacen. Evalúa las hipótesis de manera informal, utilizando su escepticismo para
desafiar los datos de múltiples maneras.

El complemento de generación de hipótesis es confirmación de hipótesis. La


confirmación de hipótesis es difícil por dos razones:

1. Necesitas un modelo matemático preciso para generar predicciones


falsificables. Esto a menudo requiere una considerable sofisticación estadística.

2. Solo se puede usar una observación una vez para confirmar una hipótesis. Tan
pronto como lo usa más de una vez, vuelve a hacer un análisis
exploratorio. Esto significa hacer la confirmación de hipótesis que necesita para
"registrar previamente" (escribir de antemano) su plan de análisis, y no
desviarse de él incluso cuando haya visto los datos. Hablaremos un poco sobre
algunas estrategias que puede utilizar para facilitar el modelado .

Es común pensar en el modelado como una herramienta para la confirmación de


hipótesis, y la visualización como una herramienta para la generación de
hipótesis. Pero eso es una falsa dicotomía: los modelos a menudo se utilizan
para la exploración, y con un poco de cuidado puede usar la visualización para
la confirmación. La diferencia clave es la frecuencia con que miras cada
observación: si miras solo una vez, es una confirmación; Si miras más de una
vez, es exploración.

1.4 Prerrequisitos
Hemos hecho algunas suposiciones sobre lo que ya sabe para aprovechar al
máximo este libro. En general, debe tener conocimientos numéricos, y es útil si
ya tiene alguna experiencia en programación. Si nunca has programado antes,
puedes encontrar Hands on Programming con R by Garrett como un
complemento útil de este libro.

Hay cuatro cosas que necesita para ejecutar el código en este libro: R, RStudio,
una colección de paquetes de R llamada tidyverse y un puñado de otros
paquetes. Los paquetes son las unidades fundamentales de código R
reproducible. Incluyen funciones reutilizables, la documentación que describe
cómo usarlas y datos de muestra.

1.4.1 R
Para descargar R, ir a CRAN, el c omprehensive R un rchive n R ed. CRAN se
compone de un conjunto de servidores espejo distribuidos en todo el mundo y
se utiliza para distribuir paquetes R y R. No intente elegir un espejo que esté
cerca de usted: en su lugar, use el espejo en la nube, https://cloud.r-project.org,
que automáticamente lo resuelve por usted.

Una nueva versión principal de R sale una vez al año, y hay 2-3 versiones
menores cada año. Es una buena idea actualizar regularmente. La actualización
puede ser un poco complicada, especialmente para las versiones principales,
que requieren la reinstalación de todos sus paquetes, pero su desactivación solo
empeorará las cosas.

1.4.2 RStudio
RStudio es un entorno de desarrollo integrado, o IDE, para la programación en
R. Descárgalo e instálalo desde http://www.rstudio.com/download . RStudio se
actualiza un par de veces al año. Cuando haya una nueva versión disponible,
RStudio le informará. Es una buena idea actualizar regularmente para poder
aprovechar las últimas y mejores funciones. Para este libro, asegúrese de tener
RStudio 1.0.0.

Cuando inicie RStudio, verá dos regiones clave en la interfaz:


Por ahora, todo lo que necesitas saber es que escribes el código R en el panel
de la consola y presionas Intro para ejecutarlo. ¡Aprenderás más a medida que
avanzamos!

1.4.3 El tidyverse
También necesitarás instalar algunos paquetes R. Un paquete R es una
colección de funciones, datos y documentación que amplía las capacidades de
la base R. El uso de paquetes es clave para el uso exitoso de R. La mayoría de
los paquetes que aprenderá en este libro son parte de esta llamado
tidyverse. Los paquetes en el tidyverse comparten una filosofía común de datos
y programación R, y están diseñados para trabajar juntos de forma natural.

Puede instalar el tidyverse completo con una sola línea de código:


install.packages("tidyverse")
En su propia computadora, escriba esa línea de código en la consola y luego
presione Intro para ejecutarlo. R descargará los paquetes de CRAN y los
instalará en su computadora. Si tiene problemas con la instalación, asegúrese
de estar conectado a Internet y de que https://cloud.r-project.org/ no esté
bloqueado por su servidor de seguridad o proxy.

No podrá utilizar las funciones, los objetos y los archivos de ayuda en un


paquete hasta que lo cargue library(). Una vez que haya instalado un paquete,
puede cargarlo con la library()función:
library(tidyverse)
#> ── Attaching packages ────────────────────────────────── tidyverse 1.2.1 ──
#> ✔ ggplot2 3.0.0.9000 ✔ purrr 0.2.5
#> ✔ tibble 1.4.2 ✔ dplyr 0.7.6
#> ✔ tidyr 0.8.1 ✔ stringr 1.3.1
#> ✔ readr 1.1.1 ✔ forcats 0.3.0
#> ── Conflicts ───────────────────────────────────── tidyverse_conflicts() ──
#> ✖ dplyr::filter() masks stats::filter()
#> ✖ dplyr::lag() masks stats::lag()
Esto le indica que tidyverse está cargando los paquetes ggplot2, tibble, tidyr,
readr, purrr y dplyr. Estos se consideran el núcleo del tidyverse porque los
usarás en casi todos los análisis.

Paquetes en el tidyverse cambian con bastante frecuencia. Puede ver si hay


actualizaciones disponibles y, opcionalmente, instalarlas
ejecutando tidyverse_update().

1.4.4 Otros paquetes


Hay muchos otros paquetes excelentes que no forman parte del tidyverse,
porque resuelven problemas en un dominio diferente o están diseñados con un
conjunto diferente de principios subyacentes. Esto no los hace mejores o
peores, solo diferentes. En otras palabras, el complemento del tidyverse no es el
messyverse, sino muchos otros universos de paquetes interrelacionados. A
medida que aborda más proyectos de ciencia de datos con R, aprenderá nuevos
paquetes y nuevas formas de pensar acerca de los datos.

En este libro usaremos tres paquetes de datos de fuera del tidyverse:


install.packages(c("nycflights13", "gapminder", "Lahman"))
Estos paquetes proporcionan datos sobre vuelos aéreos, desarrollo mundial y
béisbol que usaremos para ilustrar ideas clave de ciencia de datos.

1.5 Ejecutando código R


La sección anterior le mostró un par de ejemplos de ejecución de código R. El
código en el libro se ve así:
1 + 2
#> [1] 3
#> [1] 3
Si ejecuta el mismo código en su consola local, se verá así:
> 1 + 2
[1] 3
Hay dos diferencias principales. En su consola, escribe después de >, llamado
el indicador ; No mostramos el aviso en el libro. En el libro, la salida se
comenta con #>; en su consola aparece directamente después de su
código. Estas dos diferencias significan que si está trabajando con una versión
electrónica del libro, puede copiar fácilmente el código del libro y en la consola.
A lo largo del libro usamos un conjunto consistente de convenciones para
referirnos al código:

 Las funciones están en una fuente de código y están seguidas de paréntesis,


como sum(), o mean().
 Otros objetos R (como datos o argumentos de función) están en una fuente de
código, sin paréntesis, como flightso x.
 Si queremos dejar en claro de qué paquete proviene un objeto, usaremos el
nombre del paquete seguido de dos puntos, como dplyr::mutate(), o
nycflights13::flights . Esto también es un código R válido.

1.6 Obteniendo ayuda y aprendiendo más


Este libro no es una isla; no hay un recurso único que le permita dominar la R. A
medida que comienza a aplicar las técnicas descritas en este libro a sus propios
datos, pronto encontrará preguntas que no respondo. Esta sección describe
algunos consejos sobre cómo obtener ayuda y cómo ayudarlo a seguir
aprendiendo.

Si te quedas atascado, comienza con Google. Por lo general, agregar "R" a una
consulta es suficiente para restringirla a resultados relevantes: si la búsqueda
no es útil, a menudo significa que no hay ningún resultado específico de R
disponible. Google es particularmente útil para mensajes de error. Si recibe un
mensaje de error y no tiene idea de lo que significa, ¡intente googlearlo! Lo más
probable es que haya confundido a alguien más en el pasado, y habrá ayuda en
algún lugar de la web. (Si el mensaje de error no está en inglés,
ejecute Sys.setenv(LANGUAGE = "en")y vuelva a ejecutar el código; es más
probable que encuentre ayuda para los mensajes de error en inglés).
Si Google no ayuda, intente stackoverflow . Comience por dedicar un poco de
tiempo a buscar una respuesta existente, incluso [R]para restringir su búsqueda
a preguntas y respuestas que usen R. Si no encuentra nada útil, prepare un
ejemplo o reprex mínimo reproducible . Un buen reprex facilita la ayuda de otras
personas y, a menudo, usted mismo resolverá el problema en el curso de su
creación.
Hay tres cosas que debe incluir para que su ejemplo sea reproducible:
paquetes, datos y código requeridos.

1. Los paquetes deben cargarse en la parte superior de la secuencia de


comandos, de modo que sea fácil ver cuáles necesita el ejemplo. Este es un
buen momento para verificar que está utilizando la última versión de cada
paquete; es posible que haya descubierto un error que se ha solucionado desde
que instaló el paquete. Para los paquetes en el tidyverse, la forma más fácil de
verificar es ejecutar tidyverse_update() .
2. La forma más fácil de incluir datos en una pregunta es usarla dput()para
generar el código R para recrearlo. Por ejemplo, para recrear el mtcars conjunto
de datos en R, realizaría los siguientes pasos:
1. Correr dput(mtcars)en R
2. Copia la salida
3. En mi script reproducible, escriba y mtcars <-luego pegar.

Intente encontrar el subconjunto más pequeño de sus datos que aún revele el
problema.

3. Pase un poco de tiempo asegurándose de que su código sea fácil de leer para
otros:

o Asegúrese de que haya utilizado espacios y que los nombres de sus variables
sean concisos, pero informativos.

o Use comentarios para indicar dónde está su problema.

o Haz tu mejor esfuerzo para eliminar todo lo que no esté relacionado con el
problema.
Cuanto más corto sea el código, más fácil será comprenderlo y más fácil será
corregirlo.

Para terminar, compruebe que realmente ha hecho un ejemplo reproducible al


iniciar una nueva sesión R y copiando y pegando su script en.

También debe dedicar algo de tiempo a prepararse para resolver problemas


antes de que ocurran. Invertir un poco de tiempo en aprender R cada día dará
buenos resultados a largo plazo. Una forma es seguir lo que Hadley, Garrett y
todos los demás en RStudio están haciendo en el blog RStudio . Aquí es donde
publicamos anuncios sobre nuevos paquetes, nuevas funciones de IDE y cursos
en persona. También puede seguir a Hadley ( @hadleywickham ) o Garrett
( @statgarrett ) en Twitter, o seguir a @rstudiotips para mantenerse al día con
las nuevas funciones del IDE.

Para mantenerse al día con la comunidad R más ampliamente, recomendamos


leer http://www.r-bloggers.com : agrega más de 500 blogs sobre R de todo el
mundo. Si eres un usuario activo de Twitter, sigue el #rstatshashtag. Twitter es
una de las herramientas clave que Hadley utiliza para mantenerse al día con los
nuevos desarrollos en la comunidad.

1.7 Agradecimientos
Este libro no es solo el producto de Hadley y Garrett, sino el resultado de
muchas conversaciones (en persona y en línea) que hemos tenido con muchas
personas en la comunidad de R. Hay algunas personas a las que nos gustaría
agradecer en particular, porque han pasado muchas horas respondiendo a
nuestras preguntas tontas y ayudándonos a pensar mejor acerca de la ciencia
de datos:

 Jenny Bryan y Lionel Henry para muchas discusiones útiles sobre cómo trabajar
con listas y columnas de listas.

 Los tres capítulos sobre el flujo de trabajo fueron adaptados (con permiso),
dehttp://stat545.com/block002_hello-r-workspace-wd-project.html por Jenny
Bryan.

 Genevera Allen para discusiones sobre modelos, modelos, la perspectiva del


aprendizaje estadístico y la diferencia entre la generación de hipótesis y la
confirmación de hipótesis.

 Yihui Xie por su trabajo en el paquete de reserva y por responder


incansablemente a mis solicitudes de funciones.

 Bill Behrman por su cuidadosa lectura de todo el libro y por probarlo con su
clase de ciencia de datos en Stanford.

 La comunidad de Twitter #rstats que revisó todos los borradores de capítulos y


proporcionó toneladas de comentarios útiles.

 Tal Galili por aumentar su paquete de dendextend para apoyar una sección
sobre agrupamiento que no llegó al borrador final.

Este libro fue escrito a la vista, y muchas personas contribuyeron con solicitudes
de extracción para solucionar problemas menores. Un agradecimiento especial
a todos los que contribuyeron a través de GitHub:

Gracias a todos los contribuidores en orden alfabético: adi pradhan, Ahmed


ElGabbas, Ajay Deonarine, @Alex , Andrew Landgraf, bahadir
cankardes, @batpigandme , @behrman , Ben Marwick, Bill Behrman, Brandon
Greenwell, Brett Klamer, Christian G. Warden, Christian Mongeau, Colin
Gillespie, Cooper Morris, Curtis Alexander, Daniel Gromer, David Clark, Derwin
McGeary, Devin Pastoor, Dylan Cashman, Earl Brown, Eric Watt, Etienne B.
Racine, Flemming Villalona, Gregory Jefferis, @harrismcgehee , Hengni Cai Ian
Lyttle, Ian Sealy, Jakub Nowosad, Jennifer (Jenny) Bryan, @jennybc , Jeroen
Janssens, Jim Hester, @jjchern , Joanne Jang, John Sears, Jon Calder,
Jonathan Page, @jonathanflint, Jose Roberto Ayala Solares, Julia Stewart
Lowndes, Julian durante, Justinas Petuchovas, Kara Woo, @kdpsingh , Kenny
Darrell, Kirill Sevastyanenko, @koalabearski , @KyleHumphrey , Lawrence Wu,
Matthew Sedaghatfar, Mine Cetinkaya-Rundel, @MJMarshall , Mundi , @nate-d-
olson , Nelson Areal, Nick Clark, @nickelas , Nirmal
Patel, @nwaff , @OaCantona , Patrick Kennedy, @Paul , Peter Hurford,
Rademeyer Vermaak, Radu Grosu, @rlzijdeman , Robert
Schuessler, @robinlovelace , @robinsones , S'busiso Mkhondwane, @ seamus-
mckinsey, @seanpwilliams , Shannon Ellis, @shoili , @ sibusiso16 , @spirgel ,
Steve Mortimer, @svenski , Terence Teo, Thomas Klebel, TJ Mahr, Tom Prior,
Will Beasley, @yahwes , Yihui Xie, @ zeal626 .

1.8 Colofón
Una versión en línea de este libro está disponible
en http://r4ds.had.co.nz . Continuará evolucionando entre las reimpresiones del
libro físico. La fuente del libro está disponible
en https://github.com/hadley/r4ds . El libro está basado
en https://bookdown.org, lo que facilita la conversión de archivos de reducción
de R en HTML, PDF y EPUB.