-
Notifications
You must be signed in to change notification settings - Fork 5
/
Copy path5-1_operadores.R
224 lines (128 loc) · 4.99 KB
/
5-1_operadores.R
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
################################################################################
### R BASICS WORKSHOP ###
### PRESENTATION 6-1: OPERADORES ###
### ###
### Unida de Servicios Bioinformáticos ###
### Instituto Nacional de Medicina Genómica ###
### Website: github.com/hachepunto/R_Basics_workshop ###
################################################################################
## AYUDA CON OPERADORES ########################################################
help("*")
?* # Esto no funciona
# Un par de vectores y matrices que vamos a utilizar para ejemplos
p <- seq(1, 10, 1)
z <- seq(9, 18,1)
p
z
P <- matrix(seq(1, 25, 1), ncol=5)
Z <- matrix(seq(26, 50, 1), ncol=5)
P
Z
## OPERADORES ARITMÉTICOS ######################################################
# Estos sirven para hacer varias operaciones aritméticas; estos son los más
# comunes:
# + suma
# - resta
# * multiplicación
# / división
# ^ potencia
# %% modulo - calcula el resto en una división
# %/% división de enteros - calcula la parte entera de una división
## IMPORTANTE: Es critico entender como los operadores trabajan en diferentes
## situaciones.
## Caso 1. Dos escalares (números únicos): el caso más sencillo ##
10 + 3
10 - 3
10 * 3
10 / 3
10 ^ 3
10 %% 3
10 %/% 3
## Caso 2. Un vector o matriz y un escalar ##
p
P
p - 3
P - 3
# Como se puede ver, la operación se produce entre cada elemento en p o P con el
# escalar. El resultado es del mismo tamaño que el vector o matriz. Lo mismo
# pasa para todo el resto de operadores, por ejemplo:
p ^ 3
P ^ 3
p %% 3
P %% 3
## Caso 3. Dos vectores o matrices de mismo tamaño ##
z
Z
p * z
P / Z
# En este caso la operación es entre elementos correspondientes de los dos
# vectores o matrices. El resultado es del mismo tamaño que los objetos
# originales.
## Caso 4. Dos vectores o matrices de tamaños distintos ##
length(p)
p - c(1,2)
p - c(1,2,3)
## IMPORTANTE: en el primer caso, la longitud del objeto pequeño (2) es un
## múltiplo de la longitud del grande (10). La operación se realiza "reciclando"
## o repitiendo elementos del objeto más pequeño. En el segundo caso, también
## pasa lo mismo, pero la longitud del pequeño (3) no es un múltiplo de la
## longitud del grande. Esto genera un mensaje de advertencia.
## Caso 5. Operaciones con NA ##
# En cualquier situación cuando hay NAs, las operaciones siempre devuelven NA
p - NA
p - c(1, NA)
## OPERADORES COMPARATIVOS #####################################################
# > mayor que
# < menor que
# >= mayor o igual que
# <= menor o igual que
# == igual que (no es un solo "=", son dos juntos!)
# != no es igual que
## IMPORTANTE: Las operaciones entre objetos se llevan a cabo bajo las mismas
## reglas que para los operadores aritméticos, pero devuelven ya sea TRUE o
## FALSE:
p < 5
z > 8
p <= z
Z >= P
p == c(33, 37)
Z != c(NA, 37)
# Aunque no es un operador, las funciones *is.na* y *!is.na* son útiles en este
# contexto
x <- c(3, NA, 34, 23, 19, NA)
is.na(x) # función "is.na"
!is.na(x) # función "is.na" con lógico "no"
p < c(5, NA)
is.na(p < c(5, NA))
!is.na(p < c(5, NA))
## OPERADORES LÓGICOS #####################################################
# &: quiere decir 'y'
# |: quiere decir 'o'
5 > 3 # Esto es TRUE (verdadero)
5 < 3 # Esto es FALSE (falso)
2 > 4 # Esto es FALSE
2 < 4 # Esto es TRUE
## & ##
# Es 5 menos que tres Y 2 mayor que 4?
5<3 & 2>4 # Esto es FALSE porque NINGUNA de las comparaciones son TRUE
# Es 5 mayor que tres Y 2 mayor que 4?
5>3 & 2>4 # Esto también es FALSE porque NO TODAS las comparaciones son TRUE
# Es 5 mayor que tres Y 2 menor que 4?
5>3 & 2<4 # Ahora ambas comparaciones son TRUE, entonces todo junto también es TRUE
## | ##
# Es 5 menor que 3 O 2 mayor que 4?
5<3 | 2>4 # Esto es FALSE porque NINGUNA de las comparaciones son TRUE
# Es 5 mayor que 3 O 2 mayor que 4?
5>3 | 2>4 # Esto también es TRUE porque AL MENOS UNA las comparaciones son TRUE
# Es 5 mayor que 3 O 2 menor que 4?
5>3 | 2<4 # Esto también es TRUE porque AL MENOS UNA las comparaciones son TRUE
## IMPORTANTE: Cuando *&* o *|* se usan con vectores o matrices, las
## comparaciones se hacen elemento por elemento. Por ejemplo:
p > 5
z < 15
p>5 & z<18 # Es TRUE solo para los elementos donde p>5 Y z<18 son TRUE
p>5 | z<18 # Es TRUE para los elementos donde p>5 O z<18 son TRUE
## IMPORTANTE: *&&* y *||* también existen pero hacen la comparación solo para
## el primer elemento del vector
p>5 && z<18
p>5 || z<18