if(condicao){
# conjunto de comandos que serão executados
# caso a condição seja TRUE
}
6 Estruturas
A seguir, apresentaremos algumas das estruturas fundamentais de programação no R, abordando conceitos de condicionais e loops.
6.1 Condicionamento
Em determinadas situações, é necessário executar uma parte do código apenas quando uma condição específica é atendida. O R oferece algumas estruturas básicas para organizar seu código nesse contexto: if
, else
e if_else
. A seguir, abordaremos detalhadamente cada uma dessas opções.
6.1.1 O if
A estrutura básica do if
é a seguinte:
Note que o código começa com o comando
if
, seguido por parênteses e chaves;Dentro dos parênteses, deve-se inserir uma expressão lógica (ou um conjunto delas), cujo resultado será TRUE ou FALSE;
Dentro das chaves, especificamos o conjunto de instruções a serem executadas caso a condição dos parênteses seja avaliada como TRUE.
Veja o exemplo abaixo:
# Criando o objeto x
= 10
x
# Bloco de condicionamento
if(x < 20){ #especificando a condição
print("x é menor do que 20") #código a ser executado apenas se a condição for atendida
}
[1] "x é menor do que 20"
Observamos que a mensagem é exibida porque o valor do objeto x é inferior a 20, atendendo assim à condição estabelecida. Vejamos outro exemplo.
# Criando o objeto h
= 8
h
# Bloco de condicionamento
if(x == h){ #especificando a condição
= x + h #código a ser executado apenas se a condição for atendida
x
}
# verificando o valor de x
x
[1] 10
Aqui percebemos que a condição lógica não foi satisfeita e o conjunto de códigos especificado dentro do if
não foi executado.
Suponha que, caso a condição não seja atendida, você queira executar um conjunto específico de comandos alternativos.
6.1.2 O if em conjunto com o else
Vamos ver agora como acrescentar a estrutura de condicionamento if
o opcional else
.
A estrutura básica do if
com o opcional else
é a apresentada a seguir:
if(condicao){
# conjunto de comandos que serão executados
# caso a condição seja TRUE
else{
} # conjunto de comandos que serão executados
# caso a condição seja FALSE
}
Observem que o código começa da mesma forma que no exemplo anterior, com o comando
if
, seguido por parênteses e chaves;Novamente, os parênteses devem conter uma expressão lógica (ou conjunto delas), cujo resultado será TRUE ou FALSE;
Dentro das chaves do
if
, especificamos o conjunto de instruções a serem executadas se a condição dos parênteses for avaliada como TRUE;Logo após, temos a opção
else
, também seguida de chaves;Dentro das chaves do
else
, definimos o conjunto de comandos a serem executados caso a condição dos parênteses doif
seja avaliada como FALSE.
# Criando o objeto z
= 2
z
# Bloco de condicionamento
if(z < 20){ #especificando a condição
= z^h
z cat("O valor de z foi alterado para", z) #código a ser executado apenas se a condição for atendida
else{
} = z * h
z cat("O valor de z foi alterado para", z) #código a ser executado se a condição não for atendida
}
O valor de z foi alterado para 256
Podemos encadear diversos if
e else
em sequência como mostra o exemplo a seguir:
# Criando o objeto x
= 10
x
# Bloco de condicionamento
if(x < 10){ #especificando a condição 1
= x + h #código a ser executado apenas se a condição 1 for atendida
x cat("O valor de x foi alterado para", x)
else if(x >=10 & x<20){ #especificando a condição 2
} = x/h #código a ser executado apenas se a condição 2 for atendida
x cat("O valor de x foi alterado para", x)
else{
} = x/2 #código a ser executado apenas se as condições 1 e 2 não forem atendidas
x cat("O valor de x não foi alterado:", x)
}
O valor de x foi alterado para 1.25
Se x for um vetor em vez de um único número, os comandos criados anteriormente serão executados para todos os elementos individuais de x?
6.1.3 A função if_else
Os comandos if
, com ou sem o else
, não são vetorizados. Se você tentar aplicar o código anterior a um vetor x
em vez de um valor único, receberá uma mensagem de erro indicando que o tamanho de x
é maior que 1. Para lidar com essas situações, uma alternativa é usar a função if_else
.
A função if_else
possui a seguinte estrutura básica:
if_else(condicao, valor_se_TRUE, valor_se_FALSE)
Observe que o primeiro argumento é uma expressão lógica (ou conjunto delas), que retornará TRUE ou FALSE para cada elemento do vetor;
O segundo argumento é o valor a ser retornado quando a condição for avaliada como TRUE;
E o terceiro argumento é o valor a ser retornado quando a condição for avaliada como FALSE.
#Ativando o pacote dplyr
library(dplyr)
# Criando o objeto x
= c(310,20,230,40)
x
#Bloco de condicionamento
if_else(condition = x >130, #especificando a condição
true = 1, #valor a ser retornado caso a condição avaliada seja atendida
false = x/10) #valor a ser retornado caso a condição avaliada não seja atendida
[1] 1 2 1 4
Ao observar o resultado da função if_else
aplicada a cada elemento do vetor x
, notamos que a operação correspondente é executada conforme a condição: se a condição é atendida, o valor retornado é 1; caso contrário, é retornado o valor de x
dividido por 10.
6.2 Loopings
6.2.1 O for
Um looping que utiliza o for
no R possui a seguinte estrututa básica:
for(j in conjunto_de_valores){
# conjunto de comandos que
# serão repetidos
# tantas vezes quanto for o tamanho do conjunto de valores
}
Observe que o início do loop é bastante semelhante ao
if
, começando com o comando for, seguido por parênteses e chaves;Dentro dos parênteses, definimos um indicador que será utilizado durante o loop (neste caso, escolhemos j para representar esse indicador) e um conjunto de valores a serem iterados (denominado aqui como conjunto_de_valores);
Dentro das chaves, especificamos o conjunto de comandos a ser executado durante cada iteração do loop.
#Definindo x como um objeto nulo que será preenchido futuramente
= NULL
x
#Definindo a igual a 2
= 2
a
# Bloco de looping
for(j in 1:10){ #definindo o iterador j e o conjunto de valores
= a^j #ação que será executada em cada iteração
x[j]
}
#Visualizando x
x
[1] 2 4 8 16 32 64 128 256 512 1024
#Apresentando uma mensagem com os 5 primiros valores de x
for(j in 1:5){
cat("O valor do", j,"elemento de x é:", x[j], "\n")
}
O valor do 1 elemento de x é: 2
O valor do 2 elemento de x é: 4
O valor do 3 elemento de x é: 8
O valor do 4 elemento de x é: 16
O valor do 5 elemento de x é: 32
O \n
serve para forçar uma quebra de linha entre as mensagens apresentadas em cada interação.
6.2.2 O while
Um looping que utiliza o while
no R tem a seguinte estrututa básica:
while(condicao_for_satisfeita){
# conjunto de comandos que
# serão repetidos
# enquanto a condicao continuar retornando TRUE
}
Observe que o loop começa com o comando
while
, seguido por parênteses e chaves;Dentro dos parênteses, definimos uma condição que será verificada a cada iteração;
Dentro das chaves, listamos o conjunto de comandos a ser executado enquanto a condição permanecer TRUE.
#Definindo o objeto x
= 1
x
#Somando a x o valor 1 enquanto sua soma não exceder 5
while( x < 5){
= x + 1
x print(x)
}
[1] 2
[1] 3
[1] 4
[1] 5
6.3 Desafio 1
- Crie um projeto chamado estrutura.
- Crie um objeto denominado “final” que agrupe todas as bases de vendas por ano em um único conjunto. Portanto, é crucial incluir uma variável que identifique o ano correspondente a cada linha. Realize essa tarefa utilizando necessariamente um loop for.
- Adicione uma variável à base final criada no item anterior que classifique as vendas como “acima da média” ou “abaixo/igual à média”. A média referida é o número médio de produtos vendidos no ano em questão.