<a href="http://curso-r.github.io/exercicios_com_resolucao.html" target="_blank">Exercícios com resolução</a>

## Aula 01

### R como calculadora

1. Calcule o número de ouro no R ($\frac{1 + \sqrt{5}}{2}$).

2. O que dá divisão de 1 por 0? E -1 por 0? 

3. Quais as diferenças entre `NaN`, `NULL`, `NA` e `Inf`? 

4.a) Tente mentalmente calcular o que dá a conta `5 + 3 * 10 %/% 3 == 15` no R, sem rodar.

4.b) Adicionando apenas parênteses, faça a expressão acima retornar o resultado contrário. 

### Flow Controls

1.a) O que acontece se eu rodar
```{r, echo = F}
.Random.seed <- 121321
```

```{r, eval=FALSE}
x <- 4
if(x = 4) {
  'isso aqui apareceu'
}
x


require(abjutils)
data(pnud_muni, package='abjutils')
require(dplyr)

dados2010 <- pnud_muni[ pnud_muni$ano==2010,  c('uf', 'ufn')]
dados2010$uf2 <- paste(dados2010$uf, dados2010$ufn)
unique(dados2010$uf2)
  
```

Você notou alguma coisa estranha? Como o R se comporta nesse caso?

1.b) Como você modificaria esse código para não dar erro e aparecer a frase 'isso aqui apareceu'?
Obs: Existem duas formas de modificar o código que farão ele funcionar.

2. Escreva a frase (em uma linha)

> 1 elefante(s) incomoda(m) muita gente  
> 2 elefante(s) incomoda(m) incomoda(m) muito mais  
> 3 elefante(s) incomoda(m) muita gente  
> 4 elefante(s) incomoda(m) incomoda(m) incomoda(m) incomoda(m) muito mais  

usando `for` ou `while`.

```{r results='hide', eval=FALSE, echo=FALSE}
n <- 4
for(i in 1:n) {
  parte1 <- paste(i, "elefantes")
  parte2 <- ""
  for(j in 1:ifelse(i%%2==0,i,1)) {
    parte2 <- paste(parte2, "incomoda(m)")
  }
  parte3 <- ifelse(i%%2 == 0, "muito mais", "muita gente")
  verso <- paste(parte1, parte2, ' ', parte3, sep = '')
  print(verso)
}
```

### Funções

1. Crie uma funçao que recebe um vetor de numeros e devolve a variancia.

2. Calcule a variancia de `x <- 1:100` utilizando a sua funcao criada no item 1 e utilizando a funcao `var()` do R. Compare seus resultados. Eles coincidem? Por que?

3. Altere sua funcao para que agora ela aceite que o usuario escolha entre qual tipo de variancia ela quer calcular. Certifique-se que ela devolva 

4. Construa uma funcao que recebe dois vetores numericos de mesmo tamanho, `v1` e `v2`, e retorne a media ponderada de `v1` por `v2`. Calcule a média ponderada do vetor `v1 <- c(11, 9, 8, 7, 11, 6, 7, 9)` utilizando como pesos o vetor `v2 <- c(1, 2, 1, 2, 1, 2, 1, 2)`. BONUS: certifique que o usuario tenha passado vetores de tamanhos iguais e ambos numericos. Retorne `NULL` caso uma dessas condicoes falhe.  

5. Crie uma versao da funcao `paste()` que una palavras pulando linhas (`\\n`)


6. Crie uma função que recebe um vetor de characters e um vetor numérico de mesmo comprimento e imprima um texto com os nomes dessas variáveis, um símbolo de atribuição (`<-`), e os números, separando cada expressão pulando linhas. Por exemplo:

```{r eval=FALSE, results='hide'}
x <- letters[1:10]
y <- 10:1

imprime_coisas_legais(x, y)
```

```{r eval=FALSE, results='hide'}
a <- 10
b <- 9
c <- 8
d <- 7
e <- 6
f <- 5
g <- 4
h <- 3
i <- 2
j <- 1
```

## Aula 02

### Estruturas de dados

**1**. O senhor Adalberto é dono de uma loja e, utilizando o R, ele quer criar um cadastro de seus clientes. Para isso, ele está armazenando as informações em uma matriz da seguinte maneira:

```{r, eval=FALSE}
cadastro <- matrix(c(NA, NA, NA, NA), nrow = 100, ncol = 4, 
                   dimnames = list(NULL, c("Nome", "Idade", "Cidade", "Telefone")))

cadastro[1,] <- c("Maria das Dores", 56, 3025-111, "São Paulo")
cadastro[2,] <- c("José Aníbal", 40, 3333-012, "Santos")
cadastro[3,] <- c("Pedro Silva", 23, 3091-777, "São Paulo")
# ...
```

a) O que faz o argumento `dimnames =`? O que significa o primeiro argumento da lista ser `NULL`?

b) O que vai acontecer se o senhor Adalberto tentar tirar a média da idade dos seus clientes fazendo `mean(cadastro[,2])`? Como ele poderia calcular essa média sem mudar a estrutura do objeto `cadastro`?

c) No lugar de `matrix`, qual seria a melhor estrutura para se utilizar neste caso? 

**2**. Por que `0.1 == 0.3/3` retorna `FALSE`? 

### Subsetting

**1**. Considere o `data.frame` *diamonds* do R:


a) Como você faria para permutar aleatoriamente as colunas?

b) É possível permutar linhas e colunas simultaneamente em um passo? 

c) Como ordenar as colunas do banco de dados em ordem alfabética?

d) Crie uma nova variável no banco de dados que seja 1 se o preço (`price`) for menor 300 e 0 caso contrário.

**2**. Considere o vetor abaixo:

```{r}
x1 <- 1:8
```

a) Por que a expressao `x1 == c(2,3)` não retorna as posições de `x1` que são iguais a 2 ou 3? 

b) O que faz o operador `%in%`?

### Leitura de dados

1. Vamos supor que o seu diretório de trabalho seja `"Desktop/pasta1/pasta2"` e que dentro da *pasta2* você tenha uma *pasta3*. Sem mudar o diretório de trabalho, escreva um código, utilizando a função `read.table()`, para ler um arquivo que esteja

a) dentro da *pasta3*.
b) dentro da *pasta1*.

2. É possível ler um arquivo em que o separador de valores (`sep`) é igual ao separador de casas deciamais (`dec`)?

3. Qual a diferença entre as funções `read.csv()` e `read.csv2()`?

### O operador *pipe*

1. Reescreva a expressão abaixo utilizando o operador `%>%`.

```{r}
x <- 0.1

library(ggplot2)

qplot(x=sample(sqrt((log(seq(1, 10, x)) + 2)), 40, replace = T), geom="histogram")
```

2. Para que servem os operadores:

a) `%<>%`?
b) `%T>%`?
c) `%$%`?

### Gráficos com o pacote *graphics*

**1**. Considere o gráfico abaixo:

```{r}
x <- seq(-3, 3, 0.01)
y <- 1/x

plot(x, y, type = "l")
```


a) Altere os limites do eixo x para que o gráfico seja visualizado apenas do -2 ao 2.

b) Acrescente um título ao grafico.

C) Acrescente uma reta vertical pontilhada no ponto x = 0.

d) Acrescente uma legenda ao gráfico no "terceiro quadrante".

**2**. Como construir dois gráficos na mesma janela?

## Aula 04

A base de dados `bd_dyad_sample` (leia executando `data(bd_dyad_sample, package='abjutils')`) contém em cada linha uma coalizão ocorrida ou não na Organização Mundial do Comércio, entre dois países. Os países estão identificados pelas colunas `ccode1` e `ccode2`. A coalizão é identificada pela variável `Freq` ou a variável `coalition`, que são iguais e valem `1` se houve coalizão e `0` caso contrário. A coluna `ccoalition` é um identificador de qual foi a coalizão que aconteceu (Mercosul, acordos da Europa, etc).

As outras medidas da base são basicamente medidas de distância entre caracteísticas dos países em relação a um dado ano. Por exemplo, `pwt_lrgdp` mede a diferença (em log) dos PIBs dos países, e `dist_latlon` mede a distância dos países.

### Tidy data

**1**. Qual é a unidade observacional (o que identifica uma observação)?

### select, filter, mutate, arrange, summarise, gather, spread

**2**. Qual é o código do país que entrou mais vezes em alguma coalizão?

**3**. Qual é o código do país que entrou em coalizão com mais países?

**4**. Quantas coalizões tivemos em cada ano?

**5**. Construa uma matriz de adjacências usando `dplyr`. Queremos um `data.frame` com número de linhas igual ao número de colunas, e o conteúdo da tabela é `1` se o país da linha entra em coalizão com o país da coluna em dado ano e dada coalizão, e `0` caso contrário. 

## Aula 05

### ggplot2

**1** Como adicionar um título a um gráfico?

**2** Como alterar a posição da legenda de um gráfico? Como removê-la?

**3** Como personalizar os eixos de um gráfico?

**Dica**: consulte esse [site](http://www.cookbook-r.com/Graphs/Legends_(ggplot2)/).

Para fazer os exercícios abaixo, utilize o banco de dados `movies` do pacote `ggplot2`.

**4** Faça um gráfico de barras mostrando o número de filmes por ano de 1990 para cá.

**5** Faça boxplots da classificação (rating) para cada classificação da MPAA. Adicione ao gráfico uma linha vermelha pontilhada horizontal que cruze o eixo y no valor 5.

**6** Faça histogramas da classificação (rating) para cada gênero de filme.

**Dica**: para plotar uma reta horizontal, utilize a função `geom_hline()`.

## Aula 06

## Aula 07

## Aula 08

## Aula 09

## Aula 10

## Aula 11

## Aula 12

