EAR: R Básico

Aula 15 - Funções

Encarte

Filosofia de publicação (Selo DC)

Apoio CEAC e UFSJ

Livro de Apoio

Usaremos Batista e Oliveira (2021):

Introdução

Mais uma vez, nos reportamos aos princípios do R, definidos por Chambers (2016), mais especificamente ao segundo princípio,

Princípio da função: Tudo que acontece no R é uma chamada de função.

Introdução

  • Quando associamos um nome ao objeto, isto é, x <- 10; Na realizada, temos: `<-`(x, 10);
  • Quando digitamos no x no console e, posteriormente, apertando o botão ENTER do teclado, nos bastidores, estamos na realidade chamando a função print(x) para imprimir o valor que o nome se associa;

O que é uma função em R?

Uma função em R é um objeto como qualquer outro. Os tipos são: closure, special ou buitin.

O que é uma função em R?

Exemplo: A função mode() apresenta atributos intrínsecos?

typeof(mode) # Tipo
[1] "closure"
length(mode) # comprimento
[1] 1

O que é uma função em R?

Tabela: Tipo de funções.
Tipo de função typeof() mode()
Criada por usuário closure function
Função interna que não avalia seus argumentos special function
Função interna que avalia seus argumentos bultin function

O que é uma função em R?

Exemplo:

# Tipagem C
typeof(list); typeof(mean); typeof(`[`)
[1] "builtin"
[1] "closure"
[1] "special"
# Tipagem S
mode(list); mode(mean); mode(`[`)
[1] "function"
[1] "function"
[1] "function"

O que é uma função em R?

  • Para identificar se um objeto é uma função, usamos: is.function();
  • As funções internas usam as chamadas .Internal() e .Primitive(), sendo funções que representam uma interface para as linguagens de baixo nível, do qual as funções foram implementadas;
  • As funções internas só o R Core Team podem criá-las;
  • A nível de usuário, criamos as funções do tipo: closure;

Funções do tipo closure

As funções do tipo closure são dividas em três componentes:

  • Argumentos, função formals()
  • Corpo, função body() e
  • Ambiente, função environment().

Primeiro exemplo

> # Vetor
> y <- c(5, 3, 4); y
[1] 5 3 4
> # Funcao
> sort(x = y)
[1] 3 4 5

Primeiro exemplo (continuação…)

> # Argumentos da funcao sort
> formals(sort)
$x


$decreasing
[1] FALSE

$...
> # Corpo da funcao
> body(sort)
{
    if (!is.logical(decreasing) || length(decreasing) != 1L) 
        stop("'decreasing' must be a length-1 logical vector.\nDid you intend to set 'partial'?")
    UseMethod("sort")
}

Primeiro exemplo (continuação…)

> # Ambiente
> environment(sort)
<environment: namespace:base>

Argumentos de entrada e padrão

A função sort() tem argumento padrão para decreascing = FALSE

> # Funcao
> sort(x = y, decreasing = TRUE)
[1] 5 4 3

Funções em pacotes

Pacotes: Entenda por pacote um diretório contendo subdiretórios e arquivos específicos. Em um dos subdiretórios, temos o local onde armazenamos as funções criadas. Ao instalar e anexar o pacote no R, todas as funções tornam-se disponíveis no ambiente global. Os pacotes nativos padrão sempre estão disponíveis para execução.

Funções em pacotes

  • Principal pacote nativo: base;
  • Sempre estará anexado ao caminho de busca;
  • Acessar funções sem anexar, Sintaxe: nome_pacote::nome_função

Ajuda sobre funções em pacotes

> ?sort()
> ??sort()
> help("sort")

Chamada de função

  • Aninhado:
> # Gerando 100 numeros aleatorios de uma distribuicao normal
> set.seed(10) # Semente
> x <- rnorm(100)
> 
> # Calculando o desvio padrao
> sqrt(var(x))
[1] 0.9412359

Chamada de função (continuação…)

  • intermediária:
> # Calculando o desvio padrao
> vari <- var(x)
> desvpad <- sqrt(vari); desvpad
[1] 0.9412359

Chamada de função (continuação…)

  • Pipe:
> # Calculando o desvio padrao
> x |>
+   var() |>
+   sqrt()
[1] 0.9412359

Obrigado

Sugestões, perguntas, críticas…

Referências

BATISTA, B. D. O.; OLIVEIRA, D. A. B. J. R básico. Ouro Branco, MG, Brasil: [s.n.], 2021.
CHAMBERS, J. M. Extending R. Boca Raton, Florida: Chapman; Hall/CRC, 2016.