# R (linguagem de programação)/Estruturas de controle

Aqui, estruturas de controle se refere aos condicionais, laços etc, assim como às funções.

## Condicionais

* Para obter ajuda sobre os controles condicionais ("se... então", etc):
O condicional mais básico é a estrutura "se... então... (senão...)":
ou pode haver somente a condição para a execução principal:
A condição do if é unidimensional, ou seja, deve conter apenas um retorno booleano explícito ou derivado de uma expressão:
* x == y "x é igual a y"
* x != y "x não é igual a y"
* x > y "x é maior que y"
* x < y "x é menor que y"
* x >= y "x é maior ou igual a y"
* x <= y "x é menor ou igual a y"
Dentro da condição pode haver combinações de expressões, desde que o conjunto respeite a unidimensionalidade da condição, usando os operadores:
* & ou && para E (AND)
* | ou || para OU (OR).
Aqui cabe uma observação relevante: por ser uma linguagem interpretada, o interpretador processa a linha até que encontre o que parece ser seu fim. Então, um pedaço de código como:
dará erro. O motivo é que, ao processar a linha
o interpretador acha que a instrução terminou neste ponto, então a linha seguinte
é interpretada como uma linha isolada - e else não existe exceto como parte do if.
Para evitar este tipo de erro, deve-se colocar o código a ser executado entre chaves - { e } depois dos ifs e elses.
* A função ifelse é uma função com três argumentos: o primeiro é a condição a ser testada (uma variável lógica), e os dois seguintes são os valores assumidos no caso verdadeiro e no caso falso. Note-se que a condição pode ser uma variável lógica simples, ou um vetor.
** Neste exemplo, gera-se uma sequência de 1 a 10, e são zerados os valores entre 5 e 8:

## Laços (loops)

Em R existem três formas de fazer loops: for, repeat e while.
* O comando for é o mais simples - mas pode parecer estranho para quem está acostumado com a linguagem C. É preciso definir um vetor de valores, e dizer que a variável que sofre o for está neste vetor:
Note-se que, em quase todos os casos onde o for é usado, uma programação baseada em vetores é bem mais eficiente.
* Quando não for possível usar a instrução for, pode-se usar repeat e while.
Nos dois exemplos abaixo são mostrados valores da distribuição normal padronizada, desde que eles sejam menores que um. A função cat é usada para mostrar os valores na tela.

## Loops implícitos

A função apply (e suas variantes) é uma forma de usar loops de forma eficiente. Seu uso será visto mais tarde.

## Funções

Uma função é tratada como uma variável, cuja declaração começa por
Acima, temos uma função anônima. Para dar um nome, basta determinar que uma variável é igual a ela:

## Tempo de processamento

Em programas que consomem muito tempo, é importante descobrir quais partes do código estão pesando.
As funções system.time e proc.time servem para isto.
system.time retorna o tempo de CPU (CPU time)

## Funções semelhantes ao Unix

* system permite executar funções do sistema operacional (DOS, unix, etc). Por exemplo, se existe uma função no sistema operacional para converter entre padrões de imagem, convert, que converte de .ps para .png, pode-se chamá-la:
* file.info dá informações sobre um arquivo.
Podem-se apagar arquivos com file.remove: