Está en la página 1de 9

13/2/2020 Curso de R | Estructuras de control - Mauricio Anderson

Curso de R | Estructuras de control


by Mauricio | Nov 25, 2016 | Curso R

Las estructuras de control nos permiten controlar el ujo de ejecución de una secuencia de
comandos. De este modo, podemos poner «lógica» en el código de R y lograr así reutilizar
fragmentos de código una y otra vez.

Las estructuras de control más utilizadas son:

• if / else: permite decidir si ejecutar o no un fragmento de código en función de una condición.


• for: ejecuta un bucle una cantidad ja de veces.
• while: ejecuta un bucle mientras sea verdadera una condición.
• repeat: ejecuta un bucle inde nidamente (la única forma de detener esta estructura es
mediante el comando break).
• break: detiene la ejecución de un bucle.
• next: salta a la siguiente ejecución de un bucle.

La mayoría de estas no son usadas en sesiones interactivas (cuando escribimos código directo
en la consola), sino cuando escribimos funciones o expresiones largas. En el próximo post
veremos como trabajar con funcionar en R, pero de momento es necesario tomar conocimiento
de las estructuras de control, ya que haremos amplio uso de ellas en el futuro.

https://mauricioanderson.com/curso-r-estructuras-control/ 1/9
13/2/2020 Curso de R | Estructuras de control - Mauricio Anderson

Tabla de Contenidos [ocultar]

1 IF-ELSE
2 SWITCH
3 FOR
4 WHILE
5 REPEAT
6 NEXT / BREAK

IF-ELSE

La combinación IF-ELSE es la más utilizada en R. Esta estructura de control permite actuar en


función de una condición. La sintaxis es:

if(<condicion>) {
## bloque de código
}

## Continue with rest of code


if(<condicion>) {
## bloque de código
} else {
## otro bloque de código
}

if(<condition1>) {
## bloque de código
} else if(<condicion2>) {
## otro bloque de código
} else {
## otro bloque de código
}

Ejemplo:

x <- runif(1, 0, 10) ## creamos un nro aleatorio entre 0 y 10


if(x > 5) {
y <- TRUE
} else {
y <- FALSE
}

De este modo estamos asignando un valor a una variable en función del valor de otra. Lo que se
debe tener en cuenta es que la condición debe retornar un valor TRUE o FALSE.

https://mauricioanderson.com/curso-r-estructuras-control/ 2/9
13/2/2020 Curso de R | Estructuras de control - Mauricio Anderson

Otra opción para usar la estructura IF-ELSE en forma más comprimida es mediante al función
ifelse:

# ifelse(condicion, TRUE, FALSE)

ifelse( runif(1) > 0.5, "A", "B")

SWITCH

El comando SWITCH permite ejecutar un bloque de código distinto en función del valor de una
variable.

switch(<EXPR>,
<valor_1> {# código},
...

<valor_n> {# código})

Ejemplo:

x <- 1:10
type <- 'mean'
switch(type,
mean = mean(x),
median = median(x),
sd = sd(x))
[1] 5.5

FOR

Los bucles FOR son el tipo de bucle más utilizado en R. Estos toman una variable a la que se le
asignan los elementos de un objeto (en general, vectores o listas) en forma sucesiva a medida
que se van recorriendo los ciclos.

for(<variable> in <objeto iterable>) {


# código
...
}

Ejemplo:

for(i in 1:5) {
print(i)
}

https://mauricioanderson.com/curso-r-estructuras-control/ 3/9
13/2/2020 Curso de R | Estructuras de control - Mauricio Anderson

[1] 1
[1] 2
[1] 3
[1] 4
[1] 5

Tanto con la sentencia IF como con el bucle FOR, en caso de que solo se ejecute una única
sentencia, no es estrictamente necesario el uso de las llaves, no obstante es una buena practica
utilizarlas incluso en estos casos.

# for(<variable> in <objeto iterable>) <código>


for(i in 1:5) print(i)
[1] 1
[1] 2
[1] 3
[1] 4
[1] 5

Si queremos recorrer los elementos de un objeto podemos realizarlo directamente, o por su


índice ayudándonos de la función seq_along(x), la cual genera una secuencia numérica que
usaremos para indica los indices de los elementos de los objetos que queremos recorrer:

# Creamos un vector sobre el cual vamos a iterar


x <- c("a", "b", "c", "d")
seq_along(x)
[1] 1 2 3 4

# Podemos iterar accediendo a los elementos por su índice


for(i in seq_along(x)) {
print(x[i])
}
[1] "a"
[1] "b"
[1] "c"
[1] "d"

# o podemos acceder a estos directamente


for(letra in x) {
print(letra)
}
[1] "a"
[1] "b"
[1] "c"
[1] "d"

En caso en que se quisiera recorrer una estructuras de más de una dimensión, como puede ser
una matriz, simplemente anidamos bucles FOR:

https://mauricioanderson.com/curso-r-estructuras-control/ 4/9
13/2/2020 Curso de R | Estructuras de control - Mauricio Anderson

x <- matrix(1:6, 2, 3)
x
[,1] [,2] [,3]
[1,] 1 3 5
[2,] 2 4 6

for(i in seq_len(nrow(x))) {
for(j in seq_len(ncol(x))) {
print(x[i, j])
}
}
[1] 1
[1] 3
[1] 5
[1] 2
[1] 4
[1] 6

WHILE

Los bucles WHILE comienzan comprobando una condición. Si esta es verdadera, entonces se
entra al cuerpo del bucle. Una vez completada una ejecución de este bloque, se comprueba la
condición nuevamente y así sucesivamente hasta que la comprobación de la condición de falso.

while(<condicion>) {
# código
...
}

Ejemplo:

count <- 0
while(count < 10) {
print(count)
count <- count + 1
}

[1] 0
...
[1] 9

REPEAT

La estructura REPEAT ejecuta un bucle in nitamente. En general no es utilizada para realizar


análisis, sino cuando se realiza programación. La única forma de terminar con el bucle es
llamando dentro de este a la función break.
https://mauricioanderson.com/curso-r-estructuras-control/ 5/9
13/2/2020 Curso de R | Estructuras de control - Mauricio Anderson

repeat(<condicion>) {
# código
...
}

Ejemplo:

count <- 0
repeat {
print(count)
count <- count + 1
if(count == 10) break
}

[1] 0
...
[1] 9

NEXT / BREAK

La función next es utilizada para terminar un ciclo del bucle en ejecución y pasar al siguiente.
Por ejemplo, si estamos dentro de un bucle FOR lo que sucedería al momento de ejecutar la
función next es que se se salta directo al siguiente elemento sobre sobre el que se está
iterando.

Ejemplos:

# Imprimimos por pantalla los numero pares entre 1 y 10


for(i in 1:10) {
if(i %% 2 == 0) next
print(i)
}

Por el contrario, la función break es usada para detener un bucle y salir de él inmediatamente.

# Recorremos los elementos de un vector hasta encontrar una condición y salir de é


for(i in mtcars$mpg) {
print(i)
if(i < 15) break
}

[1] 21
[1] 21
[1] 22.8
[1] 21.4
[1] 18.7

https://mauricioanderson.com/curso-r-estructuras-control/ 6/9
13/2/2020 Curso de R | Estructuras de control - Mauricio Anderson

[1] 18.1
[1] 14.3

Comentarios
ROGER on 30 agosto, 2019 at 7:05 PM
hola mauricio, talvez no sera el tema descrito arriba, alguna idea de como obtener la fecha de
cierto archivo en mi pc y colocarlo en una variable.
ej: tengo un archivo en excel llamado «bovino» con cierta dirección:(«c:/….») generado el
23/03/2019. Quisiera que en la variable lea solo la fecha descrita anteriormente(23/03/2019), NO
IMPORTA EL ORDEN.
saludos.

Reply

Martin on 28 agosto, 2018 at 3:59 PM


¿como puedo hacer para tomar una matriz de (por ejemplo) 2414 las por 71 columnas, y pedirle
que a los primeros 34 las de la columna 1 las reemplaze por valor 0, a las segunda 34 la (es
decir, 35 a 68) de la segunda columna,y asi sucesivamente hasta la columna 71? Entiendo que
deberia ser con el uso de la función for para matrices pero no logro entender como hago que
salte de 1:34 en la columna a 35:68 en la columna 2, y sucesivametne.

Gracias!

Reply

Caleb Terrel on 11 agosto, 2018 at 3:16 PM


Que tal, acabo de revisar y si me corre !! aqui un ejemplo
x = 15
y = 10
# el codigo corre en una sola ejecución…
if(x == y) {
cat(«iguales»)
} else if (x < y) {
cat("x menor a y")
} else {
cat("x mayor a y")}

Reply

https://mauricioanderson.com/curso-r-estructuras-control/ 7/9
13/2/2020 Curso de R | Estructuras de control - Mauricio Anderson

Caleb Terrel on 11 agosto, 2018 at 2:30 PM


Hola, en el tema de IF ELSE, en el 3er bloque del codigo:
if() {
## bloque de código
} else if() {
## otro bloque de código
} else {
## otro bloque de código
}

¿no te estas referiendo a un codigo de multiples sentencias if? si es asi el codigo no resulta
porque antes del segundi IF deberia ir } …

Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Me puedes encontrar en

   

Todo funcionaba, pero el capacitor explotó.- Estudiante de electrónica

Suscríbete
Suscríbete ahora y recibe mensualmente una newsletter con las mejores publicaciones 

Cero spam garantizado

Tu nombre

Tu correo

Suscribir

https://mauricioanderson.com/curso-r-estructuras-control/ 8/9
13/2/2020 Curso de R | Estructuras de control - Mauricio Anderson

Copyright © 2016 Mauricio Anderson

https://mauricioanderson.com/curso-r-estructuras-control/ 9/9

También podría gustarte