domingo, 22 de setembro de 2013

Loops

As estruturas de repetição (loops) são bastante eficientes, pois possibilita a execução de comandos repetidas vezes.
Imagine que você fez uma pesquisa sobre o que as pessoas pensavam sobre o 'amor' em uma palavra e que agora você tenha esse resultado em um vetor. Agora, você quer saber se alguma pessoa pensa que o amor é 'vida'.
Suponha o seguinte vetor de resultados:
respostas<- c('calor','dinheiro','mãe','carro','família','internet','música',                                   'dinheiro','dinheiro','vida','comida')
Vejamos que temos apenas 11 respostas, armazenadas no vetor respostas. Para esse caso é simples: olhando as respostas sabemos que uma pessoa respondeu 'vida'. Mas imagine um vetor com mais de mil respostas, ficaria complicado de olhar uma a uma não?
Para verificar se há a resposta 'vida', temos que olhar o valor de cada posição do vetor respostas e compará-lo com a string 'vida'.

Uma string é uma cadeia de caracteres.

Para fazer isso, podemos escrever um comando de comparação para cada posição do vetor:
if (respostas[1]=='vida') resultado='sim';
if (respostas[2]=='vida') resultado='sim';
e assim sucessivamente.
Mas isso é equivalente a olhar cada posição manualmente e não é nosso interesse. Veja que a linha de comando para cada posição do vetor é a mesma, exceto pelo valor da posição do vetor. Isto é, podemos escrever, de forma geral:
if(resposta[i]=='vida') resultado='sim';
para i=1,..,11.
Mas como transformar o comando acima em um comando que possa ser executado? Vamos introduzir o comando for. Sua estrutura é:
for(var_cont in sequência){
    bloco de comandos; 
}
em que var_cont é uma variável de contagem e sequência é o intervalo de valores que a variável de contagem assumirá.
Para nosso exemplo, escreveríamos:
for(i in 1:length(respostas)){
if (respostas[i]=='vida') resultado='sim';
}
No código acima, criamos uma variável indicadora i que assume os valores de 1 até o tamanho do vetor (length(respostas)) e verifica se existe a palavra vida no vetor de respostas. A comparação será executada 11 vezes, porque vai percorrer todo o vetor.

Obs: A variável criada dentro do parâmetro do comando for (no caso, a variável i) será usada apenas dentro do for. Quando esse parar de ser executado, essa variável não existirá mais.

Como nosso problema consiste em analisar se existe ou não a palavra vida, podemos parar a repetição se acharmos alguma palavra vida, esteja ela no começo, no meio ou no final do vetor. Para sair de um loop sem que este tenha terminado, usamos o comando break:
for(i in 1:length(respostas)){
if (respostas[i]=='vida') {
resultado='sim';
break;
}
}
Ou seja, se, em alguma iteração do for acima, a condição respostas[i]=='vida' for verdadeira, o resultado é 'sim' e as iterações são paradas.

Uma outra estrutura de repetição é o comando while. Sua estrutura é:
while( condição ) {
bloco de comandos;
}
em que condição é uma condição para que o bloco de comandos seja executado sempre que for verdadeira.
Como não se criam variáveis dentro do parâmetro do comando while, essas devem ser declaradas antes desse comando. No nosso exemplo, faríamos:
i<-1
while( i<= length(respostas) ) {
if (respostas[i]=='vida') {
resultado='sim';
break;
}
i=i+1;
}
No código acima, declaramos uma variável de contagem antes do comando while. A condição para executar o loop é que i seja menor ou igual ao tamanho do vetor. Assim, ele executa, verifica se existe a palavra 'vida' na posição i do vetor. Se sim, pára o loop, caso contrário, incrementa 1 na variável de contagem e repete o processo se esse novo valor respeitar a condição. Assim, percorremos cada posição do vetor para verificar se a palavra 'vida' existe nesse vetor de respostas.
É importante ressalta que, quando trabalhamos com variável de contagem, normalmente utilizamos o comando for.

Nenhum comentário:

Postar um comentário