1. Exercícios


    Source

    Exercícios com resolução

    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

    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.

    1. 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.

    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:

    x <- letters[1:10]
    y <- 10:1
    
    imprime_coisas_legais(x, y)
    
    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:

    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:

    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.

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

    2. 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 %>%.
    x <- 0.1
    
    library(ggplot2)
    
    qplot(x=sample(sqrt((log(seq(1, 10, x)) + 2)), 40, replace = T), geom="histogram")
    
    ## stat_bin: binwidth defaulted to range/30. Use 'binwidth = x' to adjust this.
    
    ## Warning: position_stack requires constant width: output may be incorrect
    

    plot of chunk unnamed-chunk-8

    1. Para que servem os operadores:

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

    Gráficos com o pacote graphics

    1. Considere o gráfico abaixo:

    x <- seq(-3, 3, 0.01)
    y <- 1/x
    
    plot(x, y, type = "l")
    

    plot of chunk unnamed-chunk-9

    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/).

    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