Ads Top

Como fazer loops for em R

Loops no R


Neste tutorial, veremos como você pode escrever um loop for básico em R. Ele é voltado para iniciantes, e se você ainda não estiver familiarizado com a sintaxe básica da linguagem R, recomendamos que você dê uma olhada primeiro neste tutorial introdutório de R.



Conceitualmente, um loop é uma maneira de repetir uma sequência de instruções sob certas condições. Eles permitem automatizar partes do seu código que precisam de repetição. Soa estranho? Não se preocupe, isso ficará mais claro quando começarmos a trabalhar com alguns exemplos abaixo.

Antes de começar a escrever loops em R, há uma coisa importante que você deve saber. Ao navegar na web, você costuma ler que deve-se evitar o uso de loops em R. Por que? Bem, isso é porque R suporta vetorização.

Simplificando, isso permite cálculos muito mais rápidos. Por exemplo, soluções que utilizam loops são menos eficientes do que soluções vetorizadas que utilizam funções de aplicação, como lapply e sapply. Geralmente é melhor usar o último. No entanto, como iniciante em R, é bom ter um entendimento básico dos loops e como escrevê-los. Se você quiser aprender mais sobre os conceitos de vetorização em R, esta é uma boa leitura.

Escrevendo um loop for simples em R

Vamos voltar ao significado conceitual de um loop. Suponha que você queira fazer várias impressões do seguinte formulário: O ano é [ano] em que [ano] é igual a 2010, 2011 e até 2015. Você pode fazer o seguinte:

print(paste("O ano é", 2010))
"O ano é 2010"
print(paste("O ano é", 2011))
"O ano é 2011"
print(paste("O ano é", 2012))
"O ano é 2012"
print(paste("O ano é", 2013))
"O ano é 2013"
print(paste("O ano é", 2014))
"O ano é 2014"
print(paste("O ano é", 2015))
"O ano é 2015"

Você percebe imediatamente que isso é entediante: você repete o mesmo pedaço de código repetidamente. Isso viola o princípio DRY, conhecido em todas as linguagens de programação: não se repita a todo custo. Nesse caso, usando um loop for no R, você pode automatizar a parte repetitiva:

for (ano in c(2010,2011,2012,2013,2014,2015)){
  print(paste("O ano é", ano))
}
"O ano é 2010"
"O ano é 2011"
"O ano é 2012"
"O ano é 2013"
"O ano é 2014"
"O ano é 2015"

A melhor maneira de entender o que está acontecendo no loop for é lendo o seguinte: “Para cada ano que está na sequência c (2010,2011,2012,2013,2014,2015), você executa o código chunk print (colar ("O ano é", ano)) ". Depois que o loop for executa o bloco de código para cada ano no vetor, o loop para e passa para a primeira instrução após o bloco do loop.

Veja como fizemos isso? Usando um loop for, você só precisa anotar o seu código uma vez (em vez de seis vezes). O loop for executa a instrução uma vez para cada valor fornecido (os diferentes anos que fornecemos) e define a variável (ano neste caso) para esse valor. Você pode até simplificar ainda mais o código: c (2010,2011,2012,2013,2014,2015) também pode ser escrito como 2010: 2015; isso cria exatamente a mesma sequência:

for (ano in 2010:2015){
  print(paste("O ano é", ano))
}
"O ano é 2010"
"O ano é 2011"
"O ano é 2012"
"O ano é 2013"
"O ano é 2014"
"O ano é 2015"

Como última observação no loop for em R: nesse caso, usamos a variável ano, mas na verdade qualquer variável poderia ser usada aqui. Por exemplo, você poderia ter usado i, uma variável comumente usada em loops que significa index:

for (i in 2010:2015){
  print(paste("O ano é", i))
}
"O ano é 2010"
"O ano é 2011"
"O ano é 2012"
"O ano é 2013"
"O ano é 2014"
"O ano é 2015"

Isso produz exatamente a mesma saída. Assim, você pode realmente nomear a variável da maneira que desejar, mas é mais compreensível se você usar nomes significativos.

Usando NEXT

Vamos dar uma olhada em um exemplo mais matemático. Suponha que você precise imprimir todos os números desiguais entre 1 e 10, mas os números pares não devem ser impressos. Nesse caso, seu loop ficaria assim:

for (i in 1:10) {
  if (!i %% 2){
    next
  }
    print(i)
}
1
3
5
7
9

Observe a introdução da próxima declaração. Vamos explorar o significado dessa declaração caminhando juntos nesse loop:

Quando i está entre 1 e 10, entramos no loop e, se não, o loop para. No caso de inserirmos o loop, precisamos verificar se o valor de i é desigual. Se o valor de i tiver um restante de zero quando dividido por 2 (é por isso que usamos o módulo de operação %%), não inseriremos a instrução if, execute a função de impressão e retorne. 

Caso o restante seja diferente de zero, a instrução if é avaliada como TRUE e inserimos a condicional. Aqui vemos agora a próxima instrução que faz com que retorne à condição i na 1:10, ignorando as instruções a seguir (portanto, a impressão (i)).

Considerações finais


Neste breve tutorial, você se familiarizou com o loop for em R. Embora o uso de loops em geral deva ser evitado em R, ainda é valioso ter esse conhecimento em seu conjunto de habilidades. Ele ajuda a entender os princípios subjacentes e, quando a criação de protótipos de uma solução de loop é fácil de codificar e ler. 

Nenhum comentário:

Tecnologia do Blogger.