segunda-feira, 23 de setembro de 2013

Resumindo o básico

Vimos alguns conceitos e comandos básicos até agora, por isso detalhei o que fizemos. Antes de começarmos a programar de verdade, vou fazer um esquema dos conceitos e comandos vistos:

Variáveis são objetos que armazenam informações temporárias.

Um script é uma sequência de passos (comandos) a serem executados e interpretados.


ESTRUTURA DE CONDIÇÃO


ifelse
ifelse(condição, valor se a condição é verdadeira, valor se a condição é falsa)
if... else...
if(condição){
bloco de comandos
}else if(condição){
bloco de comandos
}else{
bloco de comandos
}

ESTRUTURAS DE REPETIÇÃO (LOOPS)


for
for(var_ind in sequencia){
bloco de comandos
}
while
while(condição){
bloco de comandos
}

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.

quinta-feira, 19 de setembro de 2013

Trabalhando com condições

Neste tópico, veremos como programar condições.
Suponha que um jogador é vencedor se atinge um número mínimo de pontos, e perdedor caso contrário. Sabendo do número de pontos desse jogador, você quer saber se ele é vencedor ou não. Note a palavra chave da frase anterior: "se". É essa palavra que implica uma condição para verificar se um argumento é válido.
Para programarmos o "se", usamos o comando if. Veja o exemplo:
resultado<-c()
pontos<-200
if (pontos>150) resultado<-'vencedor'
resultado
Se você executar esse comando, o valor de resultado será 'vencedor', pois pontos>200 é um argumento verdadeiro. Troque o valor de pontos para 100 e execute, o que aparece? NULL. Isso porquê construímos a variável e não agregamos nenhum valor, ou seja, quando pontos>150 é um argumento falso, não programamos nada para essa situação. Em outras palavras, não demos comandos para quando o jogador é perdedor.
Ficamos com o seguinte pensamento: SE pontos>150, então o jogador é vencedor; SENÃO, o jogador é perdedor. Construímos esse argumento da seguinte forma:
resultado<-c()
pontos<-200
if (pontos>150) {
resultado<-'vencedor';
}else {
resultado<-'perdedor';
}
resultado
Execute o bloco de comandos acima. Como pontos>150 é um argumento verdadeiro, o resultado será 'vencedor'. Agora troque o valor de pontos para 100 e execute. Veja: como pontos>150 é um argumento falso, então o comando dentro do bloco else será executado, ou seja, o resultado será 'perdedor'.
Um outro jeito de fazer o comando if...else... acima, é usar o comando ifelse, como mostro a seguir:
resultado<-c()
pontos<-200
resultado<- ifelse (pontos>150,'vencedor','perdedor')
A estrutura do ifelse é:
ifelse (condição, valor se a condição é verdadeira, valor se a condição é falsa)
Obs: É importante perceber que, usando ifelse, estaremos modificando o valor de uma única variável. Mas se queremos executar um bloco de comandos, essa estrutura não é mais válida. 

Agora imagine que você queira classificar o jogador devido sua pontuação em 'ruim', se o jogador atinge pontuação inferior a 150, 'medio', se atinge entre 150 a 200, e 'bom' se atinge pontuação acima de 200. Então, faremos:
class<-c()
pontos<-200
if (pontos<150) {
class<-'ruim';
}else if(pontos>=150 && pontos <=200){
class<-'médio';
}else {
class<-'bom'
}
class
Note que, na segunda condição usamos o operador lógico &&, que significa 'e', ou seja: se pontos maior ou igual a 150 E pontos menor ou igual a 200.
Poderíamos construir o código acima utilizando o comando ifelse:
class<- ifelse (pontos<150 , 'ruim' , ifelse ( pontos>200 , 'bom' , 'médio ' ) )
Utilizamos o que chamamos de ifelse encaixados ou nested if-else. Isto é, uma condição de um ifelse depende do resultado da condição de outro ifelse.
Temos que concordar que o código fica mais 'enxuto' (com menos linhas), mas quando você tem mais de duas condições, imagine o trabalho que dará programar essas condições com ifelse. E também pelo fato de que ifelse não se aplica para bloco de operações, usaremos sempre (tirando raras exceções) a estrutura if... else...

terça-feira, 17 de setembro de 2013

Trabalhando com scripts

Há dois jeitos de programar no R: usando a tela inicial (terminal), ou construindo scripts. Vamos, primeiro, definir um script no nosso âmbito de programação:

Um script é uma sequência de passos (comandos) a serem executados e interpretados.

No exemplo do post anterior, criamos duas variáveis, x e y, passamos um valor para x e calculamos o cubo de seu valor através da variável y, tudo feito no terminal do R.
Vamos fazer outro exemplo:

Suponha que, dada a aresta de um cubo medida em cm e o custo de 1dm³  de um líquido, você quer calcular o volume em litros e em dm³, e calcular o custo do líquido para esse volume. Sabendo que a aresta mede 10 cm e o custo de 1dm³ desse líquido é 2, digitaremos no terminal do R:


Agora imaginem que a aresta, na verdade, mede 20 cm. Você vai ter que digitar tudo novamente para obter os resultados. Que preguiça, não? Mas, se você fizer um script, precisará mudar somente o valor da variável aresta e executar todos os passos novamente. 
Para se escrever um script no R, vá em 'Arquivo'->'Novo script'. Abrirá uma janela assim:



Digite tudo que digitamos no terminal, nessa janela.



Para executar uma linha, posicione o cursor para essa linha e aperte Ctrl+R. Para executar mais que uma linha, digamos, uma seleção, selecione os comandos desejados e aperte Ctrl+R. No nosso caso, vamos selecionar tudo e executar. Veja que, no terminal do R, apareceu todos os comandos que você executou no scritp. Agora, mude o valor da aresta para 20 e execute todo o script. Os comandos foram executados novamente, agora com o novo valor da aresta.



Para não perdermos nosso trabalho, vamos salvar o script. Vá em 'Arquivo'->'Salvar como', e salve o arquivo com a extensão .R. Caso não salve com extensão, o R consegue abri-lo e interpretá-lo, mas vamos ser organizados, correto?
Para nós, os scripts facilitarão em muito nossa vida. Imagine que você entra com um banco de dados, faz operações e descobriu que havia um erro em um comando seu. Se não tiver script, vai ter que digitar tudo novamente. Caso contrário, é só corrigir a linha de comando que apresenta erro e executar tudo novamente. 
Acostume-se com os scripts, pois vamos trabalhar muito com eles aqui.