EAR: R Básico

Aula 16 - Estruturas de controle

Encarte

Filosofia de publicação (Selo DC)

Apoio CEAC e UFSJ

Livro de Apoio

Usaremos Batista e Oliveira (2021):

Introdução

As funções que utilizaremos, a seguir, são utilizadas quando desejamos realizar processos repetitivos para um determinado fim ou condicionado, as famosas estruturas de controle. Assim, como em outras linguagens, as funções utilizadas são: if(), switch(), ifelse(), while(), repeat, for().

Introdução

Ideia básica:

função (condição) {
  expressão
}

Função if()

A sintaxe …

if (condição) {
  expressão sob condição = TRUE
} 

Função if()

A sintaxe …

if (condição) {
  expressão sob condição = TRUE
} else {
  expressão sob condição = FALSE
}

Exemplo 1

> # Objeto
> i <- 5
> # Estrutura if()
> if (i > 3) {
+   print("Maior que 3!")
+ }
[1] "Maior que 3!"

Exemplo 2

> # Objeto numerico
> x <- 10
> 
> # Estrutura 'if'
> if (is.numeric(x)) {
+   print("Isso é um número")
+ } 
[1] "Isso é um número"

Exemplo 2

> # Objeto numerico
> x <- 10
> 
> # Estrutura 'if'
> if (is.numeric(x)) {
+   print("Isso é um número")
+ } else {
+   print("Isso não é um número")
+ }
[1] "Isso é um número"

Exemplo 2

> # eh o mesmo que
> if (is.numeric(x) == TRUE) {
+   print("Isso é um número")
+ } else {
+   print("Isso não é um número")
+ }
[1] "Isso é um número"

Função ifelse()

Exemplo 3:

> # Objetos
> x <- 5
> w <- 3:8
> 
> # Segunda forma
> if (x < w) x else w
Error in if (x < w) x else w: the condition has length > 1

Função ifelse()

Sintaxe …

ifelse(condição, expressão sob TRUE, expressão sob FALSE)

Exemplo 4

> # Objetos
> x <- 5
> w <- 3:8
> 
> # Primeira sintaxe (Preferivel)
> ifelse(x < w, x, w)
[1] 3 4 5 5 5 5

Exemplo 5

> x <- 2 # numero ou palavra
> 
> # Estrutura 'if'
> if (is.character(x)) {
+   "palavra"
+ } 

Exemplo 5

> x <- 2 # numero ou palavra
> 
> # Estrutura 'if'
> if (is.character(x)) {
+   "palavra"
+ } else {
+     if ((x %% 2) == 0) {
+       "numero_par"
+     } 
+ }

Exemplo 5

> x <- 2 # numero ou palavra
> 
> # Estrutura 'if'
> if (is.character(x)) {
+   "palavra"
+ } else {
+     if ((x %% 2) == 0) {
+       "numero_par"
+     } else {
+         if ((x %% 2) == 1) {
+           "numero_impar"
+         } 
+     } 
+ }
[1] "numero_par"

Exemplo 6

> # Objeto
> set.seed(15) # Fixando a semente
> x <- rnorm(1000) # Gerando 1000 numeros aleatorios
> # medida descritiva
> opcao <- "media" 
> # opcoes: "media", "mediana", 
> #         "medapar" (media #aparada)
> if (opcao == "media") {
+   cat("A média aritmética é:", round(mean(x), 4))
+ } 

Exemplo 6

> # Objeto
> set.seed(15) # Fixando a semente
> x <- rnorm(1000) # Gerando 1000 numeros aleatorios
> # medida descritiva
> opcao <- "media" 
> # opcoes: "media", "mediana", 
> #         "medapar" (media #aparada)
> if (opcao == "media") {
+   cat("A média aritmética é:", round(mean(x), 4))
+ } else {
+     if (opcao == "mediana") {
+       cat("A mediana é:", round(mean(x), 4))
+     } 
+ }

Exemplo 6

> # Objeto
> set.seed(15) # Fixando a semente
> x <- rnorm(1000) # Gerando 1000 numeros aleatorios
> # medida descritiva
> opcao <- "media" 
> # opcoes: "media", "mediana", 
> #         "medapar" (media #aparada)
> if (opcao == "media") {
+   cat("A média aritmética é:", round(mean(x), 4))
+ } else {
+     if (opcao == "mediana") {
+       cat("A mediana é:", round(mean(x), 4))
+     } else {
+         if (opcao == "medpar") {
+           cat("A média aparada é:", round(mean(x, trim = 0.1), 4))
+         }
+     }
+ }
A média aritmética é: 0.037

Função switch()

Sintaxe…

switch (objecto,  case = ação)

Exemplo 7

> switch(opcao,
+    media = cat("A média aritmética é:", round(mean(x), 4)),
+    mediana = cat("A mediana é:", round(mean(x), 4)),
+    medapar = cat("A média aparada é:", round(mean(x, trim = 0.1), 4))
+ )
A média aritmética é: 0.037

Função repeat()

Sintaxe…

repeat {
   expressão ...
}

Exemplo 8

> # Contador
> i <- 1
> # Loop repeat
> repeat {
+   if (i > 5) {
+     break
+   } else {
+     print(i)
+     i <- i + 1
+   }
+ }
[1] 1
[1] 2
[1] 3
[1] 4
[1] 5

Exemplo 9

> i <- 1 # Contador
> repeat { # Loop repeat
+   if (i > 5) break
+   else if (i == 3) {
+       i <- i + 1
+       next
+     } else {
+       print(i)
+       i <- i + 1
+     }
+ }
[1] 1
[1] 2
[1] 4
[1] 5

Função while()

Sintaxe…

while (condição) {
   expressão ...
}

Exemplo 10

> # Contador
> i <- 1
> # Loop while
> while (i <= 5) {
+   print(i)
+   i <- i + 1
+ }
[1] 1
[1] 2
[1] 3
[1] 4
[1] 5

Exemplo 11

> # Contador
> i <- 1
> # Loop while
> while (i <= 5) {
+   if (i == 3) {
+     i <- i + 1
+     next
+   }
+   print(i)
+   i <- i + 1
+ }
[1] 1
[1] 2
[1] 4
[1] 5

Função for()

Sintaxe…

for (contador in lista) {
   expressão ...
}

Exemplo 12

> # Loop for
> for (i in 1:5) {
+   print(i)
+ }
[1] 1
[1] 2
[1] 3
[1] 4
[1] 5

Exemplo 13

> # Loop for
> for (i in 1:5) {
+   if (i == 3) {
+     next
+   }
+   print(i)
+ }
[1] 1
[1] 2
[1] 4
[1] 5

Obrigado

Sugestões, perguntas, críticas…

Referências

BATISTA, B. D. O.; OLIVEIRA, D. A. B. J. R básico. Ouro Branco, MG, Brasil: [s.n.], 2021.