Aula 2 - Funções e Manipulação de Objetos

Lucas C. L. do Carmo

2020 - 09 - 30

Anteriormente…

  1. Aprendemos sobre classes de dados;
  2. Aprendemos sobre estruturas de dados (objetos);
  3. Aprendemos a selecionar elementos de objetos;
  4. Começamos a aprender o RStudio

Hoje…

  • Como transformar e criar novos objetos usando operações matemáticas
  • Como usar scripts com o formato .R.
  • O que são funções e como usá-las
  • Importando dados para o R / RStudio

Algumas dicas:

  • “Tem um símbolo de + aparecendo no meu console o que eu faço?”
  • Se você apertar a seta para cima enquanto o console está selecionado você reescreve o último comando.
  • Existem alguns objetos já existentes no R como:
    • letters: alfabeto em letras minúsculas;
    • pi: \(\pi\);
    • cars: dataframe contendo dados de velocidade e distância até pararem;
    • iris: dataframe contendo comprimento de pétalas e sépalas

O que falta descobrir?

É possível adicionar elementos em um objeto através do seu índice

x <- c(9,6,3) # contém 3 elementos

x
[1] 9 6 3
x[4] <- 1 # adicionando um elemento na quarta posição

x
[1] 9 6 3 1

Também é possivel sobrescrever elementos dessa forma em matrizes e listas usando as formas de indicar a posição de cada tipo de objeto.

Criando novas colunas de um dataframe

Dataframes são tabelas cujas colunas tem que ter o mesmo número de linhas sempre.

Para selecionar uma coluna podemos usar a sintaxe tabela$nome_da_coluna o que retorna um vetor.

Ex.

tbl <- data.frame(
    col_1 = 1:10,
    col_2 = letters[1:10]
)

tbl$col_2
 [1] "a" "b" "c" "d" "e" "f" "g" "h" "i" "j"

Criando nova coluna em tabela existente

tbl
   col_1 col_2
1      1     a
2      2     b
3      3     c
4      4     d
5      5     e
6      6     f
7      7     g
8      8     h
9      9     i
10    10     j
tbl$col_3 <- LETTERS[1:10] #<<

tbl
   col_1 col_2 col_3
1      1     a     A
2      2     b     B
3      3     c     C
4      4     d     D
5      5     e     E
6      6     f     F
7      7     g     G
8      8     h     H
9      9     i     I
10    10     j     J

Criando uma outra coluna usando operações aritméticas

tbl
   col_1 col_2 col_3
1      1     a     A
2      2     b     B
3      3     c     C
4      4     d     D
5      5     e     E
6      6     f     F
7      7     g     G
8      8     h     H
9      9     i     I
10    10     j     J
tbl$col_4 <- tbl$col_1 ** 4 #<<

tbl
   col_1 col_2 col_3 col_4
1      1     a     A     1
2      2     b     B    16
3      3     c     C    81
4      4     d     D   256
5      5     e     E   625
6      6     f     F  1296
7      7     g     G  2401
8      8     h     H  4096
9      9     i     I  6561
10    10     j     J 10000

Operações vetorizadas

O R aplica estes operadores matemáticos de forma vetorizada o que significa que eu posso fazer soma, multiplicação e outras operações facilmente.

a <- c(1,5,10,15)

a + 2
[1]  3  7 12 17
a * 2 
[1]  2 10 20 30
b <- c(1,2,3,4)

a + b
[1]  2  7 13 19
a * b
[1]  1 10 30 60

Vetores de comprimentos diferentes

c <- c(1,5)

d <- c(10, 20, 30)

c * d 
[1]  10 100  30
c + d
[1] 11 25 31
f <- c(1, 10, 100, 1000)

c * f 
[1]    1   50  100 5000

Operadores Lógicos

Os operadores lógicos são operadores de equalidade ou inequalidade que retornam valores TRUE ou FALSE (verdadeiro ou falso).

Operador Descrição Exemplo
>, < Maior que, menor que 1 > 2 = FALSE
>=, <= Maior ou igual, menor ou igual 22 >= 22 = TRUE
== Exatamente igual 3 == 3 = TRUE
!= Não igual a 3 != 4 = TRUE
! Negação retorna o oposto do que o procede
x ∣ y x OU y 4 ∣ 12 < 10 = TRUE
x & y x E y 4 & 12 < 10 = FALSE
isTRUE(x) Testa se x é TRUE

Operadores lógicos também são aplicados de forma vetorizada

a
[1]  1  5 10 15
a > 5
[1] FALSE FALSE  TRUE  TRUE
a >= 5
[1] FALSE  TRUE  TRUE  TRUE
a == 5
[1] FALSE  TRUE FALSE FALSE

Usando vetores lógicos para selecionar valores dentro de objetos

a
[1]  1  5 10 15
a > 3 # retorna vetor lógico com resultado da expressão
[1] FALSE  TRUE  TRUE  TRUE
a[a > 3]
[1]  5 10 15

Para Matrizes

m <- matrix(a, ncol = 2)

m
     [,1] [,2]
[1,]    1   10
[2,]    5   15
m > 4
      [,1] [,2]
[1,] FALSE TRUE
[2,]  TRUE TRUE
m[m > 4]
[1]  5 10 15

Para Dataframes

tbl <- data.frame(
    nome = c("Lucas", "Robson", "Marta"),
    idade = c(28, 44, 12)
)
tbl$idade > 30
[1] FALSE  TRUE FALSE
tbl["idade"] > 30
     idade
[1,] FALSE
[2,]  TRUE
[3,] FALSE
tbl[tbl["idade"] > 30]
[1] "Robson" "44"    

Funções

O que são funções?

Função é um termo genérico que representa uma abstração de código.
Mas o que isso significa?

\(Maths:\)

\(f(x) = 3x + 9\)

\(f(3) = 18\)

Código:

f <- function(x) {
    3 * x + 9
}

f(3)
[1] 18

Já usamos diversas funções na aula anterior como:

  • c() serve para combinar vários elementos em um vetor
  • list() serve para criar listas
  • data.frame() serve para criar dataframes

Como escrever funções?

nome_da_função <- function(arg1, arg2, arg3, ...){
    expressão a ser realizada
}

Ex.

congratular <- function(nome, idade){ # arg1 nome, arg2 idade
    return(paste("Parabéns",nome,"pelos seus",idade,"anos de vida!"))
}

congratular("Mateus", 43)
[1] "Parabéns Mateus pelos seus 43 anos de vida!"

Usando outros princípios para criar funções mais úteis

Soma de elementos dentro de um vetor:

\[soma = X_1 + X_2 + X_3 + X_4 + \ldots + X_n\]

\[\sum_{i=1}^n X_i\]

Exercício

Como escrever uma função que faça isso?

soma <- function(x){
    # o que colocar aqui dentro?
}

Solução

soma <- function(x){
    sigma <- 0
    for (i in seq_along(x)) {
        sigma <- sigma + x[i]
    }
    return(sigma)
}

a
[1]  1  5 10 15
soma(a)
[1] 31

Explicação

Exercício

Escrevam a função media().

\[\bar X = \frac{1}{N}\sum_{i=1}^n X_i\]

media <- function(x){
    
}

Funções úteis

  • lenght(x): retorna o comprimento do objeto x
  • seq(): cria uma sequência de números
  • rep(): repete elementos de um vetor várias vezes
  • as.numerical(): converte elementos para números (quando possível)
  • as.character(): converte elementos para caracteres (quando possível)
  • as.logical(): converte elementos para valores lógicos (quando possível)
  • print(): imprime o objeto no console
  • paste(): cola objetos de forma vetorizada
  • ls(): lista os objetos criados
  • rm(x): remove objeto x

Funções matemáticas úteis

  • round(x, n): arredonda x para n casas decimais
  • signif(x, n): arredonda x para n números significativos
  • floor(x): arredonda para o número inteiro mais baixo
  • ceiling(x): arredonda para o número inteiro mais alto
  • max(x): retorna máximo valor no vetor
  • min(x): retorna mínimo valor no vetor
  • log(x): log na base \(e\)
  • log10(x): log base 10
  • exp(x): \(e^x\)
  • sin(), cos(), tan(): ângulos dados em radianos.

Exemplos

signif(pi, 2)
[1] 3.1
floor(pi)
[1] 3
ceiling(pi)
[1] 4
sin(pi/6)
[1] 0.5
x <- c(22/7, 87/21, 9/1.339)

signif(x, 3)
[1] 3.14 4.14 6.72
floor(x)
[1] 3 4 6
ceiling(x)
[1] 4 5 7
round( sin(x), 2 )
[1]  0.00 -0.84  0.42

Pacotes

Sabemos escrever as nossas próprias funções agora mas como iniciantes podemos ter muitos problemas em implementá-las em programas mais complexos.

O que são pacotes?

Pacotes são coleções de funções escritas por terceiros. Existem pacotes para construir gráficos (ggplot2::), para manipular texto (stringr::), reportar resultados (rmarkdown::) e quimiometria (chemometrics::).

Também existem pacotes que extendem a funcionalidade de pacotes por exemplo o patchwork:: que serve para criar figuras com múltiplos gráficos.

Pacotes (…)

O termo mais comum para pacotes é library ou seja, uma biblioteca de funções que você pode importar para o seu ambiente de trabalho para facilitar sua vida.

O R em si próprio possui algumas libraries por padrão: stats::, base::, methods::, utils:: e outras.

Para instalar uma library no seu computador use a seguinte função:

install.packages("nome_da_library") # as aspas importam

Uma vez que instalado ele ficará armazenado no seu computador até que você atualize a sua versão do R

Para carregar as funções do pacote no seu ambiente use:

library(nome_da_library) # sem aspas

Resumindo…

Nesta aula

  • Aprendemos a selecionar elementos de vetores baseado em condições lógicas
  • Aprendemos que o R executa operações de forma vetorizada
  • Aprendemos o que são funções e como escrevê-las
  • Aprendemos o que são pacotes:
    • Instalação de pacotes
    • Importando funções de pacotes