-
Notifications
You must be signed in to change notification settings - Fork 8
/
chapter1.Rmd
500 lines (374 loc) · 17 KB
/
chapter1.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
---
title_meta : Capítulo 1
title : Introducción
description : En este capítulo vamos a dar nuestros primeros pasos en R. Aprenderemos a usar la consola como calculadora y a asignar variables. También aprenderemos algunos de los tipos básicos de datos en R. Comencemos!
--- type:NormalExercise xp:100 key:fd3438d3bc
## Como funciona la plataforma
En el **editor** a la derecha puedes escribir el código para resolver los ejercicios. Al dar clic en 'Submit Answer' (Enviar Respuesta) cada línea de código es interpretada y ejecutada por R y se mostrará un mensaje diciendo si el cá, every line of code is interpreted and executed by R and you get código es correcto o contiene errores. La salidas son mostradas en la **consola** en la parte inferior derecha. También es posibe ejecutar comandos directamente en la consola, es una buena forma de experimentar con R. Los **gráficos** se muestran en la esquina superior derecha.
R utiliza el símbolo `#` para añadir comentarios en el código. Comentar el código es un buen habito a desarrollar pues indica a las personas (incluyendo nosotros mismos) que leen el código que es lo que éste hace. Los comentarios no modifican las instrucciones que escribimos en R de ninguna manera.
Cada ejercicio consta de una explicación (lo que estas leyendo ahora) y unas Instrucciones (**Instructions**) presentadas a continuación.
*** =instructions
- Da clic a 'Submit Answer' y date cuenta como la consola ejecuta el código de R del editor: la solución `7` aparece como la suma de `3` y `4`. El uso más simple de R es como una calculadora y graficadora, pero por supuesto hay mucho, mucho, mucho más!
- Añade una linea que haga el calculo de `6` y `12`.
*** =hint
Solo agrega una linea que calcule la suma de `6` y `12` tal como se muestra en el código de ejemplo!
*** =pre_exercise_code
```{r eval=FALSE}
```
*** =sample_code
```{r eval=FALSE}
# Este es el editor y la parte de abajo es la consola
# El símbolo de numeral # es utilizada para hacer comentarios
# Calcula 3 + 4
3 + 4
# Calcula 6 + 12
```
*** =solution
```{r eval=FALSE}
# Calcula 3 + 4
3 + 4
# Calcula 6 + 12
6 + 12
```
*** =sct
```{r eval=FALSE}
set_language("es")
test_output_contains("7", incorrect_msg = "No borres el c\u00f3digo que calcula la suma de 3 y 4. Solo agrega una linea que suma 6 y 12")
test_output_contains("18", incorrect_msg = "Asegúrate de agregar una linea que suma 6 y 12. No empieces la linea con <code>#</code> o R no la ejecutarà.")
success_msg("Muy bien! Ahora que estas familiarizado con la plataforma empecemos a aprende-R!")
```
*** =skills
1
--- type:NormalExercise xp:100 key:514005615d
## Aritmética con R
Como vimos el uso más simple que se le puede dar a R es el de una calculadora. Consideremos las siguientes operaciones:
- Adición: `+`
- Resta: `-`
- Multiplicación: `*`
- División: `/`
- Exponenciación: `^`
- Modulo: `%%`
Los últimos dos necesitan una breve explicación:
- El operador `^` eleva el número a la izquierda a la potencia a la derecha `3^2` es 9
- El módulo (mod) `%%` calcula el residuo de la división del número a la izquierda por el número a la derecha, por ejemplo 5 mod 3 o `5%%3` es 2.
*** =instructions
- Escribe `2^5` en el editor para calcular 2 a la quinta potencia.
- Escribe `28 %% 6` para calcular el 28 módulo 6.
- Da clic a 'Submit Answer' para ver el resultado en la consola.
*** =hint
Solo sigue las instrucciones, es sencillo :). Otro ejemplo de módulo es 9%%2 = 1.
*** =sample_code
```{r eval=FALSE}
# Adición
5 + 5
# Resta
5 - 5
# Multiplicación
3 * 5
# División
(5 + 5) / 2
# Exponenciación
# Escribe aquí!
# Modulo
# Escribe aquí!
```
*** =solution
```{r eval=FALSE}
# Adición
5 + 5
# Resta
5 - 5
# Multiplicación
3 * 5
# División
(5 + 5) / 2
# Exponenciación
2 ^ 5
# Modulo
28 %% 6
```
*** =sct
```{r eval=FALSE}
set_language("es")
msg = "No borres los otros ejemplos aritméticos!"
test_output_contains("5 + 5", incorrect_msg = msg)
test_output_contains("5 - 5", incorrect_msg = msg)
test_output_contains("(5 + 5)/2", incorrect_msg = msg)
test_output_contains("2^5", incorrect_msg = "La exponenciación no fue correcta, Asegúrate de haber leido las instrucciones")
test_output_contains("28%%6", incorrect_msg = "Parece haber un problema con la parte del módulo. Asegúrate de haber leido las instrucciones.")
success_msg("Excelente! vamos al siguiente ejercicio.")
```
*** =skills
1
--- type:NormalExercise xp:100 key:df3d0ded22
## Variables y asignaciones
Un concepto básico en programación es el de **variable**.
Una variable nos permite guardar valores (por ejemplo el número 4) o algún objeto (veremos mas adelante de que se trata) en R. Luego puedes acceder al valor guardado en la variable por medio del nombre de la misma.
Podemos asignar el valor de 4 a la variable `mi_variable` con el siguiente comando: `mi_variable <- 4`
*** =instructions
- Completa el código en el editor de tal manera que el valor de 42 quede asignado a la variable x. Da clic en 'Submit Answer'. Nota al escribir `x` en R, se imprime el valor de 42 en la consola.
*** =hint
Mira como asignamos el número 4 a `mi_variable`: `mi_variable <- 4`
*** =pre_exercise_code
```{r eval=FALSE}
# no pec
```
*** =sample_code
```{r eval=FALSE}
# Asigna 42 a x
x <-
# Imprime el valor de la variable x
x
```
*** =solution
```{r eval=FALSE}
# Asigna 42 a x
x <- 42
# Imprime el valor de la variable x
x
```
*** =sct
```{r eval=FALSE}
set_language("es")
test_object("x")
success_msg("Bien! Notaste que R no imprime el valor de la variable a la que le asignaste el valor? el código<code>x <- 42</code> no generó ninguna salida a la consola porque R supone que vas a usar esa variable en el futuro, precisamente por eso fue que creamos la variable, verdad? Muy bien sigamos!")
```
*** =skills
1
--- type:NormalExercise xp:100 key:b903aacbf6
## Variables y asignaciones (2)
Supongamos que tienes una canasta con cinco manzanas. Para recordarlo, quizás quieras asignar el número de manzanas en una variable llamada `numero_manzanas`
*** =instructions
- Escribe el siguiente código: `numero_manzanas <- 5` para asignar el numero 5 a la variable `numero_manzanas`.
- Escribe: `numero_manzanas` abajo del segundo comentario.
- Da clic a 'Submit Answer', ve la consola: el numero que sea ha impreso es `5`.
*** =hint
Recuerda que para asignar valores a variables puedes utilizar el símbolo `<-`. Alternativamente pudieras haber utilizado `=` pero `<-` es mucho mas preferido en la comunidad de R.
*** =pre_exercise_code
```{r eval=FALSE}
# no pec
```
*** =sample_code
```{r eval=FALSE}
# Asigna el valor de 5 a la variable numero_manzanas
# Imprime el valor de la variable numero_manzanas
```
*** =solution
```{r eval=FALSE}
# Asigna el valor de 5 a la variable numero_manzanas
numero_manzanas <- 5
# Imprime el valor de la variable numero_manzanas
numero_manzanas
```
*** =sct
```{r eval=FALSE}
set_language("es")
test_object("numero_manzanas",
undefined_msg = "Asegúrate de haber creado la variable <code>numero_manzanas</code>.",
incorrect_msg = "Asegúrate de haber asignado el valor correcto a la variable <code>numero_manzanas</code>.")
test_output_contains("numero_manzanas",
incorrect_msg = "Has dicho explicitamente a R que imprima la variable <code>numero_manzanas</code> a la consola?")
success_msg("Ok bien! Vamos al siguiente ejercicio.")
```
*** =skills
1
--- type:NormalExercise xp:100 key:8e54f9dca3
## Variables y asignaciones (3)
Supongamos que ahora tienes 6 naranjas. De nuevo, para no olvidarlo se te ocurre crear una variable llamada `numero_naranjas` y asignar el valor de 6 a esa variable. Ahora podemos a empezar a utilizar las variables creadas para hacer algo con ellas. Usemos R para saber el número total de frutas con las que contamos, pidamos que haga la cuenta por nosotros: `numero_manzanas + numero_naranjas`. Al leer este codigo nos damos cuenta de la importancia de dar nombres útiles a nuestras variables.
*** =instructions
- Asigna a `numero_naranjas` el valor de 6.
- R permite combinar estas variables `numero_manzanas` y `numero_naranjas` en una nueva variable `numero_frutas`. Crea la variable `numero_frutas` y asigna el valor del total de frutas que tenemos.
*** =hint
`numero_frutas` es la suma de `numero_manzanas` and `numero_naranjas`. Usa `+` para obtener la suma y `<-` para asignar el valor de la suma a `numero_frutas`.
*** =pre_exercise_code
```{r eval=FALSE}
# no pec
```
*** =sample_code
```{r eval=FALSE}
# Asigna el valor de 5 y 6 a las variables numero_manzanas y numero_naranjas respectivamente
# Suma estas dos variables e imprime el resultado.
#Crea la variable numero_frutas y asigna el resultado de la suma anterior.
```
*** =solution
```{r eval=FALSE}
# Asigna el valor de 5 y 6 a las variables numero_manzanas y numero_naranjas respectivamente
numero_manzanas <- 5
numero_naranjas <- 6
# Suma estas dos variables e imprime el resultado.
numero_manzanas + numero_naranjas
#Crea la variable numero_frutas y asigna el resultado de la suma anterior.
numero_frutas <- numero_manzanas + numero_naranjas
```
*** =sct
```{r eval=FALSE}
set_language("es")
test_object("numero_manzanas",
undefined_msg = "Asegúrate de haber definido la variable <code>numero_manzanas</code>.",
incorrect_msg = "No cambias el valor asignado a la variable <code>numero_manzanas</code>")
test_object("numero_naranjas",
undefined_msg = "Asegúrate de haber definido la variable <code>numero_naranjas</code>?",
incorrect_msg = "Asegúrate de asignarle el valor correcto a <code>numero_naranjas</code>?")
test_output_contains("numero_manzanas + numero_naranjas",
incorrect_msg = "El resultado no contiene la suma de la variables <code>numero_manzanas</code> y <code>numero_naranjas</code>. Trata de nuevo")
test_object("numero_frutas",
undefined_msg = "Asegúrate de haber definido la variable <code>numero_frutas</code>.",
incorrect_msg = "Asegúrate de haber dado el valor correcto a la variable <code>numero_frutas</code>.")
success_msg("Bien hecho! La gran ventaja de haber hecho los càlculos usando variables es que éstas son reusables. Si cambias el valor de la variable <code>numero_manzanas</code> que sea 12 en lugar de 5 y corres de nuevo el script el valor de <code>numero_frutas</code> se actualizarà al nuevo valor. Continuemos!")
```
*** =skills
1
--- type:NormalExercise xp:100 key:d21f37801f
## Manzanas y naranjas
En la escuela primaria nos decían que no sumáramos manzanas con naranjas, pero es lo que acabamos de hacer :) \n Sin embargo `numero_manzanas` y `numero_naranjas` son dos variables que contienen el mismo tipo de dato: un dato de tipo numérico. El operador `+` en R funciona con variables de este tipo. Si alguna de nuestras variables no es numérica sino por ejemplo caracter (ver el editor), entonces estaríamos tratando de asignar la suma de un caracter y un número a la variable `numero_frutas`, lo cual no es posible.
*** =instructions
- Da clic a 'Submit Answer' lee el mensaje de error, asegúrate de entender que dice (puedes copiar y pegar el texto en ingles en un traductor)
- Ajusta el código para que R deje de mostrar ese error.
*** =hint
Tienes que asignar el valor de `6` a `numero_naranjas` en lugar de la cadena de caracteres `"seis"`. Nota como las comillas nos indican que `"seis"` es caracter y no un número.
*** =pre_exercise_code
```{r eval=FALSE}
# no pec
```
*** =sample_code
```{r eval=FALSE}
# Asigna el valor de 5 a la variable llamada numero_manzanas
numero_manzanas <- 5
# Imprime el valor en numero_manzanas
numero_manzanas
# Asignando un caracter a numero_naranjas
numero_naranjas <- "seis"
numero_naranjas
# La nueva variable contiene el número total de frutas
numero_frutas <- numero_manzanas + numero_naranjas
numero_frutas
```
*** =solution
```{r eval=FALSE}
# Asigna el valor de 5 a la variable llamada numero_manzanas
numero_manzanas <- 5
# Imprime el valor en numero_manzanas
numero_manzanas
# Asignando un número a numero_naranjas
numero_naranjas <- 6
numero_naranjas
# La nueva variable contiene el número total de frutas
numero_frutas <- numero_manzanas + numero_naranjas
numero_frutas
```
*** =sct
```{r eval=FALSE}
set_language("es")
test_error()
test_object("numero_naranjas",
undefined_msg = "Por favor define la variable <code>numero_naranjas</code>.",
incorrect_msg = "Asegúrate de asignarle el valor correcto a la variable <code>numero_naranjas</code>. Caracteres y números son cosas diferentes")
test_output_contains("numero_manzanas + numero_naranjas",
incorrect_msg = "El resultado no contiene la suma de <code>numero_manzanas</code> con <code>numero_naranjas</code>.")
test_object("numero_frutas",
undefined_msg = "Por favor define la variable <code>numero_frutas</code>.",
incorrect_msg = "Asegúrate de asignarle el valor correcto a la variable <code>numero_frutas</code>.")
success_msg("Muy bien, que buen trabajo! Sigamos...")
```
*** =skills
1
--- type:NormalExercise xp:100 key:f5d6084a36
## Tipos de datos básicos en R
R trabaja con muchos tipos de datos. Para empezar, algunos de los más básicos son:
- Decimales como `4.5` son llamados **numeric** (numéricos).
- Números enteros como `4` son llamados (sorpresa!) **integer** (enteros).
- Valores Booleanos (`TRUE` (Verdadero) o `FALSE` (Falso)) **logical** (lógicos).
- Texto (cadenas de caracteres) son **characters** (caracteres).
Nota como utilizamos las comillas para denotar el texto en el editor.
*** =instructions
Cambia los valores de:
- `mi_numerica` a `42`.
- `mi_caracter` a `"cuarenta_y_dos"`. Nota como utilizamos las comillas.
- `mi_logica` a `FALSE` (Falso).
Ten en cuenta que R distingue entre mayúsculas y minúsculas!
*** =hint
Solo sigue instrucciones, recuerda que asignamos valores a las variables con `<-`.
*** =pre_exercise_code
```{r eval=FALSE}
# no pec
```
*** =sample_code
```{r eval=FALSE}
# Un valor numérico
mi_numerica <- 42.5
# Asignando una cadena de caracteres (o simplemente caracteres) nota el uso de las comillas
mi_caracter <- "cuarenta_y_dos"
# Asignando un valor lógico verdadero
mi_logica <- TRUE
```
*** =solution
```{r eval=FALSE}
# Un valor numérico
mi_numerica <- 42
# Asignando una cadena de caracteres (o simplemente caracteres) nota el uso de las comillas
mi_caracter <- "cuarenta_y_dos"
# Asignando un valor lógico verdadeso
mi_logica <- FALSE
```
*** =sct
```{r eval=FALSE}
set_language("es")
test_object("mi_numerica",
undefined_msg = "Asegúrate de definir la variable <code>my_numeric</code>.",
incorrect_msg = "Asignaste el valor correcto a <code>mi_numerica.</code>?")
test_object("mi_caracter",
undefined_msg = "Asegúrate de definir la variable <code>mi_caracter</code>.",
incorrect_msg = "Asignaste el valor correcto a <code>mi_caracter</code>?. No olvides las comillas")
test_object("mi_logica",
undefined_msg = "Asegúrate de definir la variable <code>mi_logica</code>.",
incorrect_msg = "Asignaste el valor correcto a<code>mi_logica</code>?")
success_msg("GBuen trabajo! ya casi finalizamos este capítulo :)")
```
*** =skills
1
--- type:NormalExercise xp:100 key:63b3c0fdfe
## ¿Cómo sé el tipo de dato?
¿Recuerdas que cuando añadiste `5 + "seis"` obtuviste un error debido a que los tipos de datos no coincidian? Para evitar estas penosas situaciones :\ puedes saber de antemano el tipo de dato que tienen tus variables utilizando el código `class(nombre_variable)`
*** =instructions
- Completa el código en el editor para imprimir a la consola el tipo de dato de las variables `mi_numerica`, `mi_caracter` y `mi_logica`.
*** =hint
Puedes saber el tipo de dato de la variable `mi_numerica` escribiendo `class(mi_numerica)`.
*** =pre_exercise_code
```{r eval=FALSE}
# no pec
```
*** =sample_code
```{r eval=FALSE}
# Declarando las variables de diferentes tipos
mi_numerica <- 40
mi_caracter <- "cuarenta"
mi_logica <- FALSE
# Escribe el código para averiguar el tipo de dato de cada variable
```
*** =solution
```{r eval=FALSE}
# Declarando las variables de diferentes tipos
mi_numerica <- 40
mi_caracter <- "cuarenta"
mi_logica <- FALSE
# Escribe el código para averiguar el tipo de dato de cada variable
class(mi_numerica)
class(mi_caracter)
class(mi_logica)
```
*** =sct
```{r eval=FALSE}
set_language("es")
test_object("mi_numerica")
test_object("mi_caracter")
test_object("mi_logica")
test_output_contains("class(mi_numerica)",
incorrect_msg = "El resultado no contiene el tipo de <code>mi_numerica</code>. Trata de nuevo.")
test_output_contains("class(mi_caracter)",
incorrect_msg = "El resultado no contiene el tipo de <code>mi_caracter</code>. Trata de nuevo")
test_output_contains("class(mi_logica)",
incorrect_msg = "El resultado no contiene el tipo de <code>mi_logica</code>.")
success_msg("Felicitaciones! Este fue el último ejercicio del capítulo. Ahora vamos a conocer el mundo de los vectores!")
```
*** =skills
1