Funções - Introdução

A programação de funções marca a passagem do usuário para o desenvolvedor de R. As funções podem ser bastante úteis na automatização de tarefas e na implamentação de novas análises. Funções são escritas no R com a seguinte sintaxe:

nome_da_funcao <- function(argumentos){
  acoes_a_serem_executadas
  return(valor_final_retornado)
}

As funções possuem classe própria (class function) e podem ser executadas de forma aninhada. Vamos programar uma função que calcula a média e retorna uma frase legal na apresentação.

media <- function(x){
  cat("Função legal de média\n")
  med = sum(x)/length(x)
  return(med)
}

Vamos ver se funciona?

vetor <- c(1,5,4,7,6,4,22,4,33,678,8.665,3)
media(vetor)
## Função legal de média

## [1] 64.63875
mean(vetor)
## [1] 64.63875

Vamos agora programar uma função de desvio padrão.

desvio_pad <- function(vetor, na.rm = TRUE){
  cat("Função legal de Desvio Padrão\n")
  if (na.rm == TRUE){
    vetor = vetor[!is.na(vetor)]
  }
  n = length(vetor)
  med = sum(vetor)/n
  desv = vetor - med
  desv2 = desv^2
  desv.p= sqrt(sum(desv2/(n - 1)))
  return(desv.p)
}

Vamos testar:

x = rnorm(20)
x = c(x, NA)
desvio_pad(x)
## Função legal de Desvio Padrão

## [1] 1.076367
sd(x)
## [1] NA
sd(x, na.rm = T)
## [1] 1.076367

Como exercício, vamos programar a sequência de Fibonacci usando apenas um for loop e gerando um vetor de tamanho 10:

fib = c(1,1)
for (i in 3:10){
  fib[i] = fib[i-1] + fib[i-2]
}
fib
##  [1]  1  1  2  3  5  8 13 21 34 55

Agora vamos colocar a sequência numa função em que possamos dar como argumento o tamanho do vetor que desejamos que seja criado.

fibonacci <- function(x){
fib = c(1,1)
for (i in 3:x){
  fib[i] = fib[i-1] + fib[i-2]
}
return(fib)
}

fibonacci(10)
##  [1]  1  1  2  3  5  8 13 21 34 55
fibonacci(20)
##  [1]    1    1    2    3    5    8   13   21   34   55   89  144  233  377
## [15]  610  987 1597 2584 4181 6765

Análise de Redes Sociais

Num curso ministrado por um membro do GIARS não poderia faltar uma seção introdutória sobre análise de redes!

Veja como o R executa bem funções de estudos em redes:

library(igraph)
library(sand)
lazega <- upgrade_graph(lazega)
plot(lazega, vertex.size=12, vertex.color="red", edge.arrow.size=.3,
     vertex.label.color="black", main="Lazega's lawyers")

Segue no post Workshop R e Redes 01.