Universidade Federal do Ceará

Departamento de Economia Agrícola

Programa de pós-graduação em Economia Rural

Introdução à análise de dados em R

Organizador: Professor Edward Martins Costa

Ministrante: Helson Gomes de Souza

Aula 3

Funções

1. A linguagem das funções em R

As funções são uma maneira de atribuir uma determinada atividade ao R, tornando as operações mais eficientes e com melhor execução. As funções também são uma maneira de automatizar uma série de atividades que outrora seriam feitas uma a uma pelo usuário.

A estrutura básica de uma função da linguagem R é:

nome_da_função <- function(parâmetro_1, parâmetro_2, ..., parâmetro_N){

Especificação da função

}

A função é composta por um conjunto de parâmetros que serão inputados na parte de especificação da função conforme o usuário indicar. Após criar a função, o seu uso será condcionado aos valores dos parâmetros indicados pelo usuário.

nome_da_função(parâmetro_1 = valor_parâmetro_1, parâmetro_2 = valor_parâmetro_2, ..., parâmetro_N = valor_parâmetro_N)

Para demonstrar, suponha que queiramos criar uma função que adicione um ao parâmetro x.

Note que o comando indica que só existe um parâmetro na função, ao qual chamamos de x. Para usar a função, devemos atribuir o valor desejado a x.

2. If e else

As notações if e else são maneiras que o usuário dispõe para indicar alguma condição nas funções. Basicamente, estas notações são indicadas para informar que o R deve realizar uma determinada tarefa caso uma dada condição ocorra (if) ou realizar outra tarefa definida caso a condição não ocorra (else).

Estas notações possuem a seguinte estrutura:

if(condição){

tarefa} else{

outra_tarefa}


Por exemplo:

Obriga o R a responder "2 é um número par" caso o resto da devisão de dois por dois seja igual a zero e "2 é um número ímpar" em caso contrário.

É importante que o uso da notação if não torna obrigatório o uso da notação else. No entanto, a recíproca não é verdadeira.

2.1 Else if

O usuário pode trabalhar com uma estrutura aninhada de condições, utilizando as notações if, else if e else.

if (condição_1) {

Tarefa_1

} else if (condição_2) {

Tarefa_2

} else if  (condição_3) {

Tarefa_3

...

} else if  (condição_N) {

} else {

Tarefa_N

}

2.1.2 Usando if e else em funções

Alguns componentes auxiliares das funções.

Algumas ferramentas da linguagem R podem melhorar a qualidade das funções, por exemplo:

warning() Retorna um aviso mas não interrompe o fluxo da função.

stop() Interrompe a função e imprime um aviso.

break() Interrompe a função sem fornecer um aviso.

next() Obriga o R a pular para o próximo passo da função.

return() Indica qual objeto a função deverá retornar.

3 Loop for

O loop do tipo for é aplicável quando queremos que uma determinada função seja aplicada a todos os elementos de um determinado conjunto. O loop for é formado por um índice criado pelo próprio usuário para representar os elementos de um determinado conjunto e uma função, ou seja:

for(índice, in conjunto){função}

Obs: Na presença de conjuntos muito grandes, o loop for se torna ineficiente.

3.1 Aplicações em bancos de dados

Em alguns casos precisaremos usar um loop dentro de outro loop. Por exemplo, imagine que você possui um data frame com as coordenadas geográficas de cinco municípios e quer criar uma matriz de distâncias entre esses municípios. Podemos resolver este problema usando o conceito de distância euclidiana:

\begin{equation} \sqrt((Lat_i - Lat_j)^2 + (Long_i - Long_J)^2) \end{equation}

Suponha que as informações sejam dadas por:

df <- data.frame(lat = c(-48.43, -47.78, -47.48, -47.49, -47.53), long = c(-5.09, -5.17, -5.53, -7.33, -4.45), id = 1:5)

Quem é o vizinho mais próximo de cada município?

4 While loop

Os loops do tipo while são utilizados quando desejamos aplicar uma determinada condição a cada elemento de ums sequência contínua sempre quando o elemento desta sequência aparecer.

while(condição){

função

}

O loop while é uma versão do loop for, e, a depender da ocasião, ambos podem resolver o mesmo problema:

4.1 Exemplos

5 Funções apply

As funções apply são um conjunto de ferramentas que facilitam a aplicação de tarefas em determinados objetos. Nesta aula, abordaremos as funções apply, lapply, sapply, tapply, vapply e mapply.

5.1 Apply

A função apply aplica uma função a um vetor, array ou matriz a partir de uma margem especificada.

*apply(X, MARGIN, fFUN)

Emque X é o vetor, array ou matriz em que o apply será aplicado, MARGIN recebe valor 1 para linhas e 2 para colunas e FUN é a função que será aplicada.

5.2 Lapply

Possui as mesmas aplicações da função apply, porém, é aplicavel também às listas.

lapply(X, FUN)

5.3 Sapply

Possui a mesma aplicabilidade da função lapply. No entanto, esta função retorna ao usuário os resultados em uma matriz ou vetor.

sapply(X,FUN)

5.4 Tapply

Aplica uma função a um subconjunto de um vetor que é construído a partir de um outro vetor.

tapply(X, INDEX, FUN)

Em que INDEX é o índice de agregação da função.

5.5 Vapply

Possui uma funcionalidade similar à função sapply, no entanto, seu output permite um maior controle por parte do usuário, facilitando tanto a exposição quanto a compreenção dos resultados, uma vez que, com o vapply o usuário pode indicar um tipo de valor de retorno.

vapply(X, FUN, FUN.VALUE)

Em que o parâmetro FUN.VALUE diz respeito ao tipo de valor esperado para os possíveis outputs.

5.6 Mapply

A função mapply é uma versão multiplicativa do sapply. Com a função mapply o usuário pode aplicar uma determinada função a cada elemento de um objeto de maneira consecutiva.

mapply(x, FUN, times, MoreArgs)

Em que o parâmetro MoreArgs indica um conjunto de elementos que não estão contidos no objeto X mas que o usuário também deseja aplicar a função e o parâmetro times indica a ordem de aplicação da função.

Exemplo Suponha que queiramos que cada número da sequência 1, 2, 3, 4 seja repetido 4, 3, 2, 1 vezes, sucessivamente.

Exercícios

  1. Use um loop for e as funções if e else pra criar um programa que mostre todos os números primos entre zero e 100.
  1. Suponha que você está trabalhando com uma amostra composta por dois grupos, sendo, o grupo 1 e o grupo 2. Sua amostra é dada por:

set.seed(123)

df <- data.frame(grupo = rbinom(100, 1, .45), renda = runif(100, 150, 1500))

O intervalo de confiança para a diferença de médias entre as rendas dos dois grupos quando esses possuem desvios padrões diferentes é dado pela seguinte expressão:

\begin{equation} \mathrm{IC}\left(\mu_{1}-\mu_{0} ; \gamma\right)=\left(\bar{y}_{1}-\bar{y}_{0}\right) \pm t_{\gamma} \sqrt{S_{0} / n_{1}+S_{1} / n_{0}} \end{equation}

Em que $\bar{y}_{1}$ é a renda média do grupo 1, $\bar{y}_{0}$ é a renda média do grupo 0, $t_{\gamma}$ é o valor da tabela t de student para $n-1$ graus de liberdade, $S_{0}$ é a raiz quadrada da variância amostral da variável de interesse para o grupo 0, $S_{1}$ é a raiz quadrada da variância amostral da variável de interesse para o grupo 1 e $n$ é o número de observações.

Construa uma função para o cálculo do intervalo de confiança para a diferença de média da renda dos dois grupos.

  1. O R disponibiliza um conjunto de informações sobre o naufrágio do Titanic. Para ler essas informações use:

titanic <- data.frame(Titanic)

a. Use uma função apply apropriada para obter a soma de homens e mulheres no navio.

b. Use uma função apply apropriada para obter uma tabela com o número de sobreviventes por sexo.

c. Use uma função apply apropriada para obter uma tabela com o número de passageiros por sexo e idade.

  1. Imagine que você foi contratado por uma corretora financeira. Seu primeiro trabalho é montar uma aplicação simplificada de envio de ordens ao mercado. A ordem deve requerer informações sobre o código do ativo, o tipo de operação (compra ou venda) o preço de oferta, o preço de stop gain e o preço de stop loss. Como você faria isso em R?

Nota: Suponha que só existem 3 ativos na bolsa (WINFUT, WDOFUT e OZ1D).

  1. Crie uma função que importe dados sobre população e PIB do sidra/ibge. A função deve dar ao usuário a escolha de importar os dados sobre PIB, população ou ambas as informações e deve dar a opção de importar os dados no formato padrão ou na forma de uma planilha de informações empilhadas (painel de dados).

Desafio

Use os conhecimentos adquiridos até agora para criar um jogo da forca semelhante ao que foi demonstrado na aula.