-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathCurso_R_amigable.Rmd
7121 lines (5564 loc) · 227 KB
/
Curso_R_amigable.Rmd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
---
title: "Un curso amigable sobre R"
output:
learnr::tutorial:
css: css/Estilo.css
runtime: shiny_prerendered
bibliography: Documentos/biblio.bib
nocite: '@*'
description: "Este tutorial contiene un curso básico sobre el lenguaje de programación R, enfocando en el tidyverse."
---
```{r setup, include=FALSE}
require(CursoR)
require(learnr)
require(tidyverse)
require(curl)
require(gradethis)
require(kableExtra)
require(palmerpenguins)
library(gapminder)
require(tibble)
require(timevis)
require(ggplot2)
require(gt)
require(patchwork)
library(downloadthis)
#PARA COMENTAR AL FINALIZAR
#require(jpeg)
#require(grid)
#require(gridGraphics)
#require(showtext)
#require(fontawesome)
#font_add_google('Gochi Hand', 'gochi')
#PARA COMENTAR AL FINALIZAR
tutorial_options(exercise.timelimit = 60, exercise.checker = gradethis::grade_learnr)
knitr::opts_chunk$set(echo = F,
warning = F,
error = F,
message = F)
```
## ¡Bienvenido!
```{r, echo = FALSE, eval = TRUE, out.width = "28%", fig.align = "center"}
knitr::include_graphics("images/imagen_curso.png")
```
### Descripción
Este curso pretende ser una introducción básica del `R`. Su objetivo consiste en enseñar habilidades en la limpieza, manipulación y visualización de datos mediante el uso del `R`. Tenga en cuenta que este curso no pretende ser un sustituto de un curso completo de programación o de estadística.
```{r, echo = FALSE, eval = TRUE, out.width = "74%", fig.align = "center"}
knitr::include_graphics("images/1ra_imagen.png")
```
A lo largo del curso podrá encontrar fragmentos de código para realizar ejemplos y ejercicios de codificación. Abajo encontrara como podrán ser usados:
:::example
#### Fragmentos de código para realizar ejemplos
Los ejemplos contienen código previamente escrito para que pueda explorarlo y ejecutarlo presionando el botón amarillo "Run Code" (ejecutar) en la esquina superior derecha. Puede actualizar el código en cualquiera de los ejemplos presionando "Start Over" (iniciar de nuevo) en la esquina superior izquierda y el código se restablecerá automáticamente al valor predeterminado.
:::
```{r addition_ejemplos, exercise = TRUE}
```
:::exercise
#### Fragmentos de código para realizar ejercicios de codificación
Aquí se indican ejercicios prácticos de codificación donde se le pedirá que escriba el código manualmente. Si no da con la solución, puede buscar ayuda dando clic en los botones "Solution" (solución) o "Hints" (sugerencias). En la mayoría de los casos el código podrá ser evaluado con el botón "Submit Answer" (Enviar Respuesta), indicándole cuando la respuesta sea acertada.
:::
```{r exercise_ejercicios, exercise = TRUE}
```
```{r exercise_ejercicios-solution}
#Ejercicio_código
```
También se encontrara con el siguiente bloque informativo:
:::caution
#### Bloque informativo de aclaración
En ocasiones se dara alguna recomendación sobre un tema. Este bloque se usará para llevar a cabo esto.
:::
<br>
### Acerca de nosotros
<div class="row">
<div class="col-md-6" markdown="1">
__Jorge Leonardo López Martínez__ es zootecnista con interés en el uso de la programación y la bioestadística aplicada al campo de la genética animal.
<HR>
<i class="fab fa-black-tie"></i> [leo4luffy.github.io](https://leo4luffy.github.io/)<br>
<i class="fas fa-envelope"></i> [email protected]<br>
<i class="fa fa-github"></i> [Leo4Luffy](https://github.com/Leo4Luffy)
</div>
<div class="col-md-6" markdown="1">
__Duvan Ariel Nieves Ruiz__ es estudiante de ingeniería ambiental apasionado por el software libre con interés en la ecología y la programación.
<HR>
<i class="fab fa-black-tie"></i> [duvancho321.github.io](https://duvancho321.github.io/)<br>
<i class="fas fa-envelope"></i> [email protected]<br>
<i class="fa fa-github"></i> [Duvancho321](https://github.com/Duvancho321)
</div>
</div>
<br>
No dude en comunicarse con nosotros por correo electrónico si tiene preguntas acerca del curso y su contenido.
Tenga en cuenta que este curso está bajo la licencia <a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/4.0/">Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License</a>. Por tanto el contenido del curso debe acreditarse a sus autores.
<section style="text-align: center;"><a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/4.0/"><img alt="Creative Commons License" style="border-width:0" src="https://i.creativecommons.org/l/by-nc-sa/4.0/88x31.png" /></a><br/></section>
## 1. Una breve introducción al R
### 1.1 ¿Qué es el `R`?
`R` es un lenguaje de programación creado por __Robert Gentleman__ y __Ross Ihaka__ en el año de 1992. Ambos creadores le dieron el nombre de `R` al lenguaje implementado por las iniciales de sus nombres (a modo de broma).
```{r, echo = FALSE, eval = TRUE, out.width = "28%", fig.align = "center"}
knitr::include_graphics("images/Creadores.jpg")
```
Se trata de un lenguaje __interpretado__ o de script, con __tipado dinámico__, __multiplataforma__ y __orientado a objetos__:
+ __Lenguaje interpretado__ o de script: se ejecuta utilizando
un programa intermedio llamado __intérprete__ (IDE).
+ __Orientado a objetos__: `R` realiza acciones sobre objetos (un número, un conjunto de datos, una palabra o un resumen estadístico como una media o varianza).
:::example
#### Ejemplo 1.1.1
:::
```{r addition_eje, exercise = TRUE}
a <- 12
b <- c(4, 6, 8, 12)
c <- matrix(data = 1:4,
nrow = 2,
ncol = 2)
```
:::caution
Para crear nuevos objetos en `R`, se debe hacer la __asignación__ del objeto. La asignación de objetos es la forma de almacenar información. Para hacer una asignación, se suele emplear el simbolo __<-__. Por ejemplo la notación __a <- ...__, asigna __...__ (lo que se quiere almacenar) al objeto __a__.
:::
+ __Multiplataforma__: el intérprete de `R` está disponible en muchas plataformas (Linux, Windows, UNIX, Mac OS, etc), por lo que podrá ejecutarse en muchos computadores.
+ __Tipado dinámico__: se refiere a que no es necesario
declarar el __tipo de dato__. A su vez, `R` es __fuertemente tipado__.
:::example
#### Ejemplo 1.1.2
:::
```{r addition, exercise = TRUE}
a <- 'Hola'
typeof(x = a)
b <- 1L
typeof(x = b)
c <- 12.3
typeof(x = c)
d <- 1 + 2i
typeof(x = d)
e <- c(FALSE, TRUE)
typeof(x = e)
```
### 1.2 ¿Por qué usar `R`?
El lenguaje de programación `R` se puede obtener y distribuir de forma gratuita, debido a que se encuentra bajo __Licencia Pública General__ del proyecto GNU. Por lo tanto es un programa de código abierto y gratis.
<div class="row">
<div class="col-md-8" markdown="1">
`R` cuenta con una __comunidad__ de usuarios alrededor del mundo. Al contar con una comunidad es posible dar con la solución de algún problema de programación, así como contar con el desarrollo de paquetes utilizados en temas específicos, desarrolados por especialistas en alguna parte del mundo.
</div>
<div class="col-md-4" markdown="1">
```{r, echo = FALSE, eval = TRUE, out.width = "54%", fig.align = "center"}
knitr::include_graphics("images/Rday.jpg")
```
<section style="text-align: center;"><small>Encuentro en el [Rday 2019](https://rdaymedellin.github.io/).</small></section>
</div>
</div>
Finalmente, el uso del `R` garantiza que otro investigador pueda repetir el experimento, comprobar los resultados obtenidos y estar en la condición de ampliar o refutar las interpretaciones del estudio realizado.
```{r, echo = FALSE, eval = TRUE, out.width = "30%", fig.align = "center"}
knitr::include_graphics("images/al_principio_pero_ahora.jpg")
```
<section style="text-align: center;"><small>Ilustracíon hecha por <font color = "black"><u>\@allison_horst</u></font>.</small></section>
__¡No se desanime!__ Los lenguajes de programación como el `R` no son sencillos de aprender, pero con trabajo y motivación vera como en poco tiempo se lograrán grandes avances.
### 1.3 Instalación de `R` base y RStudio
`R` base es el software básico que contiene el lenguaje de programación `R`. RStudio es un software que facilita la programación en `R`.
#### 1.3.1 `R` base:
La instalación de `R` base tanto en Windows como en Linux se realiza a través de la [CRAN](https://cran.r-project.org/) (Comprehensive R Archive Network).
<details><summary>Ejemplo de __consola__ del `R`</summary>
```{r, echo = FALSE, eval = TRUE, out.width = "64%", fig.align = "center"}
knitr::include_graphics("images/consola_R_base.jpg")
```
</details>
<br>
#### 1.3.2 RStudio:
<div class="row">
<div class="col-md-6" markdown="1">
Se puede instalar directamente desde la [página de RStudio](https://rstudio.com/products/rstudio/). Hay se encuentran los archivos de instalación tanto en Windows como en Linux.
Cuando se abre RStudio se pueden ver cuatro paneles:
</div>
<div class="col-md-6" markdown="1">
```{r, echo = FALSE, eval = TRUE, out.width = "34%", fig.align = "center"}
knitr::include_graphics("images/RStudio_2.jpg")
```
<section style="text-align: center;"><small>Ilustracíon hecha por <font color = "black"><u>\@allison_horst</u></font>.</small></section>
</div>
</div>
+ La fuente: la libreta de notas para el código
```{r, echo = FALSE, eval = TRUE, out.width = "74%", fig.align = "center"}
knitr::include_graphics("images/source_RStudio.jpg")
```
:::caution
Un texto insertado en el código el cual es omitido en la ejecución, se denomina como __comentario__. En `R`, un comentario es un texto que comienza con el símbolo __#__ y se extiende hasta el final de la línea. Este permite que `R` no intente interpretarlo como parte del código.
:::
+ La consola: el corazón de `R`
```{r, echo = FALSE, eval = TRUE, out.width = "74%", fig.align = "center"}
knitr::include_graphics("images/console.jpg")
```
+ El ambiente / el historial
<details><summary>Ejemplo de __ambiente__ del `R`</summary>
```{r, echo = FALSE, eval = TRUE, out.width = "84%", fig.align = "center"}
knitr::include_graphics("images/environment.jpg")
```
</details>
<details><summary>Ejemplo de __historial__ del `R`</summary>
```{r, echo = FALSE, eval = TRUE, out.width = "84%", fig.align = "center"}
knitr::include_graphics("images/history.jpg")
```
</details>
<br>
+ Los archivos / las gráficas / la ayuda / los paquetes
<details><summary>Ejemplo de __archivos__ del `R`</summary>
```{r, echo = FALSE, eval = TRUE, out.width = "84%", fig.align = "center"}
knitr::include_graphics("images/files.jpg")
```
</details>
<details><summary>Ejemplo de __gráficos__ del `R`</summary>
```{r, echo = FALSE, eval = TRUE, out.width = "84%", fig.align = "center"}
knitr::include_graphics("images/plots.jpg")
```
</details>
<details><summary>Ejemplo de __ayuda__ del `R`</summary>
```{r, echo = FALSE, eval = TRUE, out.width = "84%", fig.align = "center"}
knitr::include_graphics("images/help.jpg")
```
</details>
<details><summary>Ejemplo de __paqutes__ del `R`</summary>
```{r, echo = FALSE, eval = TRUE, out.width = "84%", fig.align = "center"}
knitr::include_graphics("images/packages.jpg")
```
</details>
<br>
### 1.4 Los paquetes en `R`
<div class="row">
<div class="col-md-5" markdown="1">
Los paquetes en `R` son colecciones de funciones y conjunto de datos desarrollados por la comunidad. Un paquete de `R` incluye código, documentación para su uso y conjuntos de datos.
Existen dos formas de instalar nuevos paquetes en `R`:
1) Descargarlos de la [CRAN](https://cran.r-project.org/mirrors.html) (Comprehensive R Archive Network) por medio de la función `install.packages()`.
:::example
#### Ejemplo 1.4.1
:::
</div>
<div class="col-md-7" markdown="1">
```{r, echo = FALSE, eval = TRUE, out.width = "62%", fig.align = "center"}
knitr::include_graphics("images/Lenguajes_en_paquetes_R.jpg")
```
<section style="text-align: center;"><small>Ilustracíon hecha por <font color = "black"><u>\@spren9er</u></font>.</small></section>
</div>
</div>
```{r addition_4, exercise = TRUE}
install.packages('tidyr', 'dplyr', 'ggplot2')
```
2) Mediante el uso del paquete `devtools`, el cual permite instalar paquetes alojados en distintos servidores:
+ `install_bioc()` desde [Bioconductor](https://www.bioconductor.org/).
+ `install_cran()` desde [CRAN](https://cran.r-project.org/index.html).
+ `install_git()` desde un repositorio [git](https://git-scm.com/).
+ `install_github()` desde [GitHub](https://github.com/).
:::example
#### Ejemplo 1.4.2
:::
```{r addition_5, exercise = TRUE}
install.packages('devtools')
devtools::install_github('tidyverse/dplyr')
```
Una vez haya instalado un paquete, estará en la computadora. Si se desea usar una función o un conjunto de datos del paquete instalado, debe cargar el paquete en la sesión de `R`. Para esto, existen dos formas:
1) Con la notación `nombre_paquete::nombre_función()` para hacer un uso temporal de la función o conjunto de datos.
:::example
#### Ejemplo 1.4.3
:::
```{r addition_8, exercise = TRUE}
dplyr::starwars
```
2) Cargándolo en la memoria del computador mediante el uso de la función `library()`.
:::example
#### Ejemplo 1.4.4
:::
```{r addition_9, exercise = TRUE}
library(dplyr)
Datos_starwars <- starwars
```
Para acceder a la descripción de un paquete desde `R` se puede emplear las funciones `packageDescription()` y `help()`.
:::example
#### Ejemplo 1.4.5
:::
```{r addition_6, exercise = TRUE}
packageDescription('dplyr')
#help(package = 'dplyr')
```
Otras funciones que permiten la gestión de los paquetes instalados en el computador:
```{r addition_7, exercise = TRUE}
installed.packages() # Para ver que paquetes se tienen instalados.
remove.packages('dplyr') # Si se desease eliminar un paquete (en este caso el paquete dplyr).
old.packages() # Para comprobar que paquetes necesitan ser actualizados.
update.packages() # Para actualizar todo los paquetes instalados.
```
### 1.5 Trabajando con proyectos
Un __directorio de trabajo__ es el lugar en la computadora en el que se encuentran los archivos con los que se esta trabajando. Es el lugar donde el programa `R` buscara los archivos para importarlos y al que serán exportados.
```{r, echo = FALSE, eval = TRUE, out.width = "44%", fig.align = "center"}
knitr::include_graphics("images/59va_imagen.png")
```
Con la función `getwd()` se puede encontrar el directorio en el que se esta trabajando.
:::example
#### Ejemplo 1.5.1
:::
```{r addition_10, exercise = TRUE}
getwd() # Da como resultado la ruta "/home/leo/Escritorio/github/Un_curso_amigable_sobre_R".
```
Para cambiar el directorio de trabajo se puede emplear la función `setwd()`, dando como argumento la ruta donde se encuentra el nuevo directorio de trabajo.
:::example
#### Ejemplo 1.5.2
:::
```{r addition_11, exercise = TRUE}
setwd(dir = "/home/leo/Escritorio/Curso_estadística") # Se cambia el directorio de trabajo a la carpeta Curso_estadistica.
```
Sin embargo como señala [Jenny Bryan](https://www.tidyverse.org/blog/2017/12/workflow-vs-script/), con la función `setwd()` es practicamente imposible para cualquier otra persona que no sea el autor original del código `R`, en su computadora, hacer que las rutas de archivo funcionen.<!--"La posibilidad de que el comando setwd() tenga el efecto deseado (hacer que las rutas de archivo funcionen) para cualquier persona además de su autor es 0%. También es poco probable que funcione para el autor dentro de uno o dos años o para computadoras a partir de ahora. El proyecto no es autónomo y portátil. Para recrear y tal vez extender esta trama, el destinatario afortunado deberá editar manualmente uno o más caminos para reflejar dónde ha aterrizado el proyecto en su máquina. Cuando haces esto por 73a vez en 2 días, mientras marcas una tarea, comienzas a fantasear con encender la computadora del perpetrador."--> La solución consistiría en trabajar con __proyectos__.
<div class="row">
<div class="col-md-5" markdown="1">
Un proyecto es un directorio de trabajo designado como un archivo __.Rproj__. Cuando se abre un proyecto, el directorio de trabajo se establecerá automáticamente en la carpeta en el que se encuentra el archivo __.Rproj__.
El archivo __.Rproj__ se puede crear yendo a "File" (archivo) → "New Project..." (nuevo proyecto) en RStudio, que luego se asocia con la carpeta o directorio especificado.
Configurar un directorio de trabajo correctamente también ayuda a desarrollar buenos hábitos que conducen a un __análisis reproducible__.
</div>
<div class="col-md-7" markdown="1">
```{r, echo = FALSE, eval = TRUE, out.width = "60%", fig.align = "center"}
knitr::include_graphics("images/Proyectos.jpg")
```
<section style="text-align: center;"><small>Ilustracíon hecha por <font color = "black"><u>\@allison_horst</u></font>.</small></section>
</div>
</div>
La tabla a continuación presenta algunas funciones útiles para administrar el directorio de trabajo:
```{r, echo = FALSE, eval = TRUE, out.width = "44%", fig.align = "center"}
knitr::include_graphics("images/60va_imagen.png")
```
#### 1.5.1 Estructurando el directorio de trabajo
Además de usar proyectos, también es una buena práctica estructurar el directorio de una manera que ayude a cualquier persona con la que se esta colaborando, o una versión futura de usted intente reproducir algunos análisis.
```{r, echo = FALSE, eval = TRUE, out.width = "74%", fig.align = "center"}
knitr::include_graphics("images/2da_imagen.png")
```
## 2. Lo básico en el uso del R
```{r, echo = FALSE, eval = TRUE, out.width = "54%", fig.align = "center"}
knitr::include_graphics("images/38va_imagen.png")
```
### 2.1 Escalares
Los escalares son el tipo de objeto más simple en `R`. Un objeto escalar es un objeto de un único valor, sin embargo estos se pueden clasificar en cinco clases (clases atómicas):
+ `character` (caracteres)
+ `integer` (números enteros)
+ `double` (números reales)
+ `complex` (números complejos)
+ `logical` (lógicos o boleanos)
:::example
#### Ejemplo 2.1.1
:::
```{r ejemplo_2_1_1, exercise = TRUE}
a <- 'Hola'
typeof(x =a)
b <- 1L
typeof(x = b)
b_2 <- 1
typeof(x = b_2)
c <- 12.3
typeof(x = c)
d <- 1 + 2i
typeof(x = d)
e <- c(FALSE, TRUE)
typeof(x = e)
```
:::caution
En `R` existen las llamadas __palabras clave__ o __palabras reservadas__. Estas no se deben usar como nombres ni para crear objetos, ni para crear funciones.
:::
### 2.2 Vectores
Un vector consiste en una colección de escalares de la misma clase atómica, ya sean estos números, caracteres o lógicos, pero nunca podrán ser de dos o más clases diferentes.
Hay muchas formas de crear vectores en `R`. A continuación podrá encontrar una tabla con ejemplos de estas formas:
```{r, echo = FALSE, eval = TRUE, out.width = "54%", fig.align = "center"}
knitr::include_graphics("images/39va_imagen.png")
```
:::example
#### Ejemplo 2.2.1
:::
```{r ejemplo_2_2_1, exercise = TRUE}
num <- c(1, 2, 3, 4, 5)
num
let <- c('a', 'b', 'c', 'd', 'e', 'f')
let
num_2 <- 1:10
num_2
num_3 <- 10:1
num_3
num_4 <- seq(from = 0, to = 100, by = 10)
num_4
num_5 <- rep(x = 4, times = 10)
num_5
num_6 <- rep(x = c(1, 2), each = 2)
num_6
```
:::caution
Una __función__ en `R` es un procedimiento que generalmente toma un objeto como argumento, hace algo con ese objeto y luego devuelve un nuevo objeto.
:::
```{r, echo = FALSE, eval = TRUE, out.width = "32%", fig.align = "center"}
knitr::include_graphics("images/40va_imagen.png")
```
<details><summary> Lista de funciones útiles</summary>
```{r, echo = FALSE, eval = TRUE, out.width = "74%", fig.align = "center"}
knitr::include_graphics("images/57va_imagen.png")
```
</details>
:::caution
Los __argumentos__ de una función son una serie de valores (objetos o incluso el resultado de otra función) que se pasan dentro de la función para que esta realice un proceso.
:::
:::example
#### Ejemplo 2.2.2
:::
```{r ejemplo_2_2_2, exercise = TRUE}
args(round)
#?round
#help(round)
```
#### 2.2.1 Operaciones sencillas con vectores
Las operaciones aritméticas más comunes están definidas para vectores. A continuación podrá encontrar una tabla con los operadores básicos:
```{r, echo = FALSE, eval = TRUE, out.width = "40%", fig.align = "center"}
knitr::include_graphics("images/41va_imagen.png")
```
:::example
#### Ejemplo 2.2.1.1
:::
```{r ejemplo_2_2_1_1, exercise = TRUE}
vec_1 <- c(1:8)
vec_2 <- 2
sum_vec_1_vec_2 <- vec_1 + vec_2
sum_vec_1_vec_2
```
:::example
#### Ejemplo 2.2.1.2
:::
```{r ejemplo_2_2_1_2, exercise = TRUE}
vec_1 <- seq(from = 1, to = 4, by = 1)
vec_2 <- rep(x = 2, times = 4)
div_vec_1_vec_2 <- vec_1 / vec_2
div_vec_1_vec_2
```
#### 2.2.2 Resumen estadístico en vectores
Debido a que el `R` es un lenguaje creado para estadísticas, el mismo contiene muchas funciones básicas que permiten calcular estadísticas descriptivas a partir de un vector de datos. A continuación podrá encontrar una tabla de estas funciones:
```{r, echo = FALSE, eval = TRUE, out.width = "54%", fig.align = "center"}
knitr::include_graphics("images/42va_imagen.png")
```
:::example
#### Ejemplo 2.2.2.1
:::
```{r ejemplo_2_2_2_1, exercise = TRUE}
Pesos_rn <- rnorm(n = 12, mean = 3768, sd = 572)
Pesos_rn
min(x = Pesos_rn)
mean(x = Pesos_rn)
sd(x = Pesos_rn)
quantile(x = Pesos_rn)
summary(object = Pesos_rn)
```
:::caution
En el `R` los datos faltantes se identifican como `NA` (not available). La mayoría de las funciones estadísticas en `R` en presencia de valores `NA` pueden generar resultados inconsistentes.
:::
:::example
#### Ejemplo 2.2.2.2
:::
```{r ejemplo_2_2_2_2, exercise = TRUE}
val_NA <- c(1, 5, NA, 2, 10)
mean(val_NA)
#mean(val_NA, na.rm = TRUE)
```
#### 2.2.3 Indexación de vectores
Dentro de los múltiples objetos en `R`, como los vectores en este caso, se debe tener claro como manejar o acceder a la información contenida en los mismos. Para estos casos se utiliza la __indexación__.
La indexación consiste en la selección de subconjuntos de datos por medio de operadores de selección, que en el caso de los vectores corresponde al operador `[ ]`. Existen dos tipos de indexación:
+ Indexación numérica
:::caution
La posición de los valores de un vector se pueden identificar mediante su índice. En el caso del lenguaje de programación `R`, el tipo de indexación es en base-uno (**[1]**).
:::
:::example
#### Ejemplo 2.2.3.1
:::
```{r ejemplo_2_2_3_1, exercise = TRUE}
seq(from = 1, to = 100, by = 1)
```
La indexación numérica permite acceder a los valores de un vector de acuerdo a su posición especifica dentro del vector. Para esto, se emplea la forma __a[index]__, donde __a__ es el nombre del vector e __index__ es es el índice del vector.
:::example
#### Ejemplo 2.2.3.2
:::
```{r ejemplo_2_2_3_2, exercise = TRUE}
indice <- seq(from = 1, to = 100, by = 1)
indice[44]
indice[2:10]
indice[c(4, 4, 4)]
seleccion <- 2:8
indice[seleccion]
```
:::example
#### Ejemplo 2.2.3.3
:::
```{r ejemplo_2_2_3_3, exercise = TRUE}
fechas <- c('Ene', 'Feb', 'Mar', 'Abr', 'May', 'Jun', 'Jul', 'Ago', 'Sep', 'Oct', 'Nov', 'Dic')
fechas[c(1, 6, 11)]
fechas[-c(2:5, 7:10, 12)]
```
+ Indexación lógica
:::caution
En el lenguaje de programación `R` existen los denominados __operadores lógicos__. Estos pueden ser usados para hacer comparaciones u operaciones lógicas cuyo resultado del mismo será un __vector lógico__ (`TRUE` y `FALSE`).
:::
```{r, echo = FALSE, eval = TRUE, out.width = "26%", fig.align = "center"}
knitr::include_graphics("images/44va_imagen.png")
```
:::example
#### Ejemplo 2.2.3.4
:::
```{r ejemplo_2_2_3_4, exercise = TRUE}
numeros <- seq(from = 1, to = 40, by = 1)
numeros >= 34
```
La segunda forma de indexar vectores es mediante el uso de __vectores lógicos__ (vector que solo contiene valores `TRUE` y `FALSE` como el ejemplo anterior).
:::example
#### Ejemplo 2.2.3.5
:::
```{r, echo = FALSE, eval = TRUE, out.width = "30%", fig.align = "center"}
knitr::include_graphics("images/43va_imagen.png")
```
```{r ejemplo_2_2_3_5, exercise = TRUE}
ind_logica <- c(4, 8, -1, 9, -3)
ind_logica[ind_logica > 0]
ind_logica[!(ind_logica < 0)]
```
:::example
#### Ejemplo 2.2.3.6
:::
```{r ejemplo_2_2_3_6, exercise = TRUE}
meses <- c('Ene', 'Feb', 'Mar', 'Abr', 'May', 'Jun', 'Jul', 'Ago', 'Sep', 'Oct', 'Nov', 'Dic')
meses[meses == 'Nov']
meses[meses != 'Nov']
```
:::example
#### Ejemplo 2.2.3.7
:::
```{r ejemplo_2_2_3_7, exercise = TRUE}
numeros <- seq(from = -10, to = 10, by = 1)
numeros[numeros >= 0 & numeros != 4]
```
### 2.3 Matrices y conjuntos de datos
```{r, echo = FALSE, eval = TRUE, out.width = "38%", fig.align = "center"}
knitr::include_graphics("images/46va_imagen.png")
```
Las matrices y los conjuntos de datos son dos tipos de objetos que representan estructuras de datos grandes. Si bien las matrices y los conjuntos de datos se ven muy similares, dada su estructura tabular, no son exactamente lo mismo: las matrices pueden contener solo una clase de datos (ya sea numérico o carácter), mientras que los conjuntos de datos pueden contener columnas tanto numéricas como de caracteres.
Hay muchas formas de crear matrices y conjuntos de datos en `R`. A continuación podrá encontrar una tabla de estas formas:
```{r, echo = FALSE, eval = TRUE, out.width = "54%", fig.align = "center"}
knitr::include_graphics("images/45va_imagen.png")
```
:::example
#### Ejemplo 2.3.1
:::
```{r ejemplo_2_3_1, exercise = TRUE}
x <- 1:5
y <- 6:10
z <- 11:15
x_y_z <- cbind(x, y, z)
x_y_z
x_y_z <- rbind(x, y, z)
x_y_z
```
:::example
#### Ejemplo 2.3.2
:::
```{r ejemplo_2_3_2, exercise = TRUE}
x <- c(1, 2, 3, 4, 5)
y <- c('a', 'b', 'c', 'd', 'e')
x_y <- cbind(x, y)
x_y
```
:::caution
Recuerden, las matrices pueden contener números o caracteres, ¡no ambos!. Si intenta crear una matriz con números y caracteres, el `R` convertirá todos los números en caracteres (__coerción implicita__).
:::
```{r, echo = FALSE, eval = TRUE, out.width = "38%", fig.align = "center"}
knitr::include_graphics("images/58va_imagen.png")
```
:::example
#### Ejemplo 2.3.3
:::
```{r ejemplo_2_3_3, exercise = TRUE}
matrices_1 <- matrix(
data = 1:15,
nrow = 5,
ncol = 3
)
matrices_1
matrices_2 <- matrix(
data = 1:15,
nrow = 5,
ncol = 3,
byrow = TRUE
)
matrices_2
```
:::example
#### Ejemplo 2.3.4
:::
```{r ejemplo_2_3_4, exercise = TRUE}
con_dtos <- data.frame(
'Identificación' = 1:5,
'Sexo' = c('Mujer', 'Mujer', 'Hombre', 'Mujer', 'Hombre'),
'Edad' = c(99, 34, 43, 50, 88)
)
con_dtos
```
#### 2.3.1 Conjuntos de datos preinstalados en `R` y disponibes en paquetes de `R`
El lenguaje de programación `R` cuenta con conjuntos de datos preinstalados en un paquete llamado `datasets`, el cual no requiere ser instalado una vez el mismo viene incluido en el software `R` base. Una lista completa de estos conjuntos de datos incluidos en el paquete `datasets` se puede ver al ejecutar el código `library(help = 'datasets')`.
A continuación podrá encontrar una tabla del nombre de algunos de estos conjuntos de datos acompañado de una pequeña descripción:
```{r, echo = FALSE, eval = TRUE, out.width = "56%", fig.align = "center"}
knitr::include_graphics("images/47va_imagen.png")
```
:::example
#### Ejemplo 2.3.1.1
:::
```{r ejemplo_2_3_1_1, exercise = TRUE}
data('iris')
```
También pueden existir conjuntos de datos disponibles dentro de paquetes del `R`. En la tabla a continuación podrá encontrar el nombre de algunos de estos conjuntos de datos acompañado del nombre del paquete donde se encuentra alojado y una pequeña descripción:
```{r, echo = FALSE, eval = TRUE, out.width = "56%", fig.align = "center"}
knitr::include_graphics("images/48va_imagen.png")
```
:::example
#### Ejemplo 2.3.1.2
:::
```{r ejemplo_2_3_1_2, exercise = TRUE}
data(package = 'dplyr')
#library(dplyr)
#data('starwars')
```
#### 2.3.2 Operaciones sencillas con matrices y conjuntos de datos
El lenguaje de programación `R` proporciona operadores o funciones útiles para trabajar con matrices. En la tabla a continuación podrá encontrar un ejemplo del uso de estas funciones:
```{r, echo = FALSE, eval = TRUE, out.width = "58%", fig.align = "center"}
knitr::include_graphics("images/49va_imagen.png")
```
:::example
#### Ejemplo 2.3.2.1
:::
```{r ejemplo_2_3_2_1, exercise = TRUE}
A <- matrix(data = 1:9, nrow = 3, ncol = 3, byrow = TRUE)
a <- c(4, 5, 4)
b <- c(3, 4, 4)
d <- c(8, 7, 7)
B <- rbind(a, b, d)
M_1 <- A + B
M_1
M_2 <- A %*% B
M_2
M_3 <- 4 * A
M_3
```
:::example
#### Ejemplo 2.3.2.2
:::
```{r ejemplo_2_3_2_2, exercise = TRUE}
Juan <- c(4.4, 3.8, 4.2, 3.4)
Andres <- c(3.2, 3.6, 4.4, 4.6)
Laura <- c(4.1, 3.4, 3.2, 5.0)
Notas <- rbind(Juan, Andres, Laura)
Prom_persona <- rowMeans(x = Notas)
Prom_persona
```
El lenguaje de programación `R` contiene también funciones para ver matrices y conjuntos de datos y proporcionar información sobre ambos tipos de objetos. En la tabla a continuación podrá encontrar el nombre de estas funciones acompañada de una pequeña descripción:
```{r, echo = FALSE, eval = TRUE, out.width = "44%", fig.align = "center"}
knitr::include_graphics("images/50va_imagen.png")
```
Para explicar tanto las funciones anteriores como las que se veran posteriormente en lo que resta de este capitulo, se empleara el conjunto de datos `Starwars`:
```{r, eval = TRUE, message = FALSE, echo = FALSE}
data("starwars")
Starwars <- starwars %>%
select(-c(12:14))
#Starwars <- as.data.frame(Starwars)
Starwars <- tibble::as_tibble(Starwars)
```
```{r,eval=TRUE}
save(Starwars, file="data_pkg/Starwars.rda", compress='xz')
```
```{r Conjuntos_datos, exercise = TRUE}
#library(CursoR)
#data('Starwars')
```
```{r, echo = FALSE, eval = TRUE, out.width = "74%", fig.align = "center"}
knitr::include_graphics("images/51va_imagen.png")
```
```{r, eval = TRUE, echo = FALSE, message = FALSE}
Starwars %>%
download_this(
output_name = 'Starwars',
output_extension = '.xlsx',
button_label = 'Descargar datos Starwars',
button_type = 'warning',
has_icon = TRUE,
icon = 'fa fa-download'
)
```
:::example
#### Ejemplo 2.3.2.3
:::
```{r ejemplo_2_3_2_3, exercise = TRUE}
head(x = Starwars)
tail(x = Starwars)
#View(x = Starwars)
```
<details><summary>Ejemplo de lo que se observa con `View()`</summary>
```{r, echo = FALSE, eval = TRUE, out.width = "94%", fig.align = "center"}