Você está na página 1de 20

Funções em R

Marcelo Finger

02/04/2018
Motivação
Qual trecho de código é mais claro?

tempCelsius = 5*(tempFar - 32)/9

ou

tempCelsius = converteFarenheitParaCelsius(tempFar)

Esta segunda forma envolve uma chamada de função


Vantagens de se utilizar funções

I Reutilização de código
I Clareza e elegâqncia de código
I Particionamento e organização do código
I Integração em vários arquivos
I Interfaces, bibliotecas e pacotes de software
Importancia das funções

Em R, toda operação é uma chamada de função


Estrutura das Funções
Tipos de funções em R

Dois tipos básicos:

I Funções pré-definidas. Dois tipos:


I Funções primitivas: já vem com a linguagem
I Por exemplo: ‘+‘, paste0(...), etc
I Funções de biblioteca: definidas em pacotes que devem ser
baixados e carregados
I Mais sobre isso no futuro

I Funções programadas: o tópico desta aula


Fases de uma função programada

I Definição da função: código que descreve o que a função deve


fazer quando executada. Pode ocorrer:
I No corpo de um script R
I Num arquivo a parte, carregado pelo comando source
I Chamada ou invocação da função: ativação da função para
execução. A chamada pode ocorrer:
I no console do R
I num script R executável
I no corpo (definição) de outra função

Funções pré-definidas só podem ser chamadas


Estrutura da definição de função

nome_da_função <- function( lista_de_parâmetros ) {


corpo_da_função: comandos
}

I O nome_da_função pode ser qualquer identificador, como nas


variáveis
I function é uma palavra reservada
I lista_de_parâmetros: nomes de variáveis separados por “,”
I lista_de_parâmetros pode ser vazia, mas os “()” devem
estar presentes
I Toda função devolve um único valor (pode ser ignorado):
I Última expressão da função; ou
I valor de expressão em “return(expressão)”: interrompe a
função e devolve valor
Exemplos Iniciais
Aplicação de Juros Compostos

aplicaJurosComp <- function( capital, taxa, nPeriodos ) {


capital*(1 + taxa)^nPeriodos
}

ou, equivalentemente,

aplicaJurosComp2 <- function( capital, taxa, nPeriodos ) {


return( capital*(1 + taxa)^nPeriodos )
}
Chamada Posicional

aplicaJurosComp( 100, 0.1, 12 )

## [1] 313.8428

aplicaJurosComp2( 100, 0.1, 10 )

## [1] 259.3742

Os parâmetros são copiados para as variáveis parâmetros. A função


executa e retorna um valor.
Chamada usando nome dos parâmetros

aplicaJurosComp( taxa=0.1, capital=100, nPeriodos=10 )

## [1] 259.3742

aplicaJurosComp2( nPeriodos=12, capital=100, taxa=0.1 )

## [1] 313.8428
Chamada usando prefixos nome dos parâmetros

aplicaJurosComp( taxa=0.1, cap=100, n=10 )

## [1] 259.3742

aplicaJurosComp2( nPer=12, c=100, t=0.1 )

## [1] 313.8428

Cuidado: se dois parâmetros tiverem o mesmo prefixo, chamada


usando prefixo comum gera erro
Chamada mista

aplicaJurosComp( taxa=0.1, 100, n=10 )

## [1] 259.3742

aplicaJurosComp2( nPeriodos=12, c=100, 0.1 )

## [1] 313.8428
Exemplo2: conversão Farenheit para Celsius
converteFparaC <- function( farenheit ) {
celsius <- 5*( farenheit - 32 )/9
}

# testes
tempF <- 32
print(paste0("F = ", tempF, ' ==> C = ',
converteFparaC(tempF)))

## [1] "F = 32 ==> C = 0"

tempF <- 100


print(paste0("F = ", tempF, " ==> C = ",
converteFparaC(tempF)))

## [1] "F = 100 ==> C = 37.7777777777778"


tempF <- 0
print(paste0("F = ", tempF, " ==> C = ",
converteFparaC(tempF)))

## [1] "F = 0 ==> C = -17.7777777777778"

tempF <- -40


print(paste0("F = ", tempF, " ==> C = ",
converteFparaC(tempF)))

## [1] "F = -40 ==> C = -40"


Exemplo: Raiz Quadrada Inteira

raizInteira <- function( num ) {


cont <- 0 # contador aproximando a raiz
while( cont * cont <= num ) {
cont <- cont + 1
}

return( cont - 1 )
}
Dividindo arquivos
Testando Raiz Quadrada Inteira

source("raizInteira.R") # carrega o arquivo que contém


# as funções de interesse

# Testador primitivo
if( raizInteira(0) != 0 ) stop("Erro na raiz de 0!!!")
if( raizInteira(1) != 1 ) stop("Erro na raiz de 1!!!")
if( raizInteira(19) != 4 ) stop("Erro na raiz de 19!!!")
if( raizInteira(100) != 10 ) stop("Erro na raiz de 100!!!")
print("Passou em todos os testes!!!")

Note: Se os arquivos não estiverem no mesmo diretório, será


necessário fornecer o caminho até o arquivo desejado. Use getwd()
e setwd() para verificar e mudar o diretório de trabalho.

Você também pode gostar