super_banner_728x90

segunda-feira, 27 de setembro de 2010

Breve introdução à linguagem R e seus comandos básicos

 
O R é uma linguagem de programação relativamente nova, mas já bastante utilizada. Na verdade, o R é uma implementação livre da linguagem S, da qual existe uma versão comercial, chamada S-PLUS. Como o R tem muitas funções/bibliotecas/pacotes para análise de dados, é bastante difundida na comunidade científica (por exemplo estatística e bioinformática).
A cada dia, mais desenvolvedores/colaboradores adicionam seus pacotes ao R, o que torna a linguagem cada vez mais poderosa e fácil de ser usada em problemas bem específicos, como (esses são só alguns exemplos):

Análise financeira: pacote RBloomberg
Análise de redes sociais: pacote sna (de Social Network Analysis)
Avaliação da acurácia de diagnósticos: pacote DiagnosisMed
Epidemiologia: pacote pitools
Análise de microarray (falarei sobre isso em um post não muito distante): pacotes anapuce, IsoGene, knorm, metaMA, samr, ...
Ferramentas para Bioinformática em geral: projeto Bioconductor


E esses são só alguns exemplos!
Esses dias encontrei até um pacote específico para análise de dados da famosa rede social/microblog twitter: o pacote twitteR!

O R tem uma comunidade grande, e existem vários encontros/seminários/conferências sobre a linguagem.
Imagem gerada pelo pacote statnet
Mas então se a linguagem é tão boa, vamos logo começar a programar! ;-)

Aqui você encontra mais informações sobre a instalação do R, que é bem fácil:
http://cran.r-project.org/mirrors.html

Nos links abaixo você pode encontrar alguns bons tutoriais:
An Introduction to R (em inglês): http://cran.r-project.org/doc/manuals/R-intro.html
Tutorial de R com conceitos básicos de estatística: http://www.cyclismo.org/tutorial/R/
Guia de referência básico, com principais comandos: http://cran.r-project.org/doc/contrib/Short-refcard.pdf
 
Fiz uma lista dos comandos básicos com um pequena explicação. Enjoy!

# Comandos básicos do R
# Por Leandro Lima, para o blog "Estudar Computação"

# Atribuição a variáveis (não é necessário declará-las)
x <- 5
y = 7

# Listar objetos (variáveis) criadas
ls()

# Obtendo diretório de trabalho 
getwd() # Get Working Directory

# Indicando/atribuindo diretório de trabalho 
setwd('/home/users/seu_nome') # Set Working Directory

# Criando vetores a partir de valores (função 'c', combinar)
z <- c(x, y)

# Criando vetores a partir de vetores
A <- c(1, 2, 3)
B <- c(6, 7, 8)
C <- c(A, B)
D <- c(A, 7, 10)

# Acessando elementos do vetor
A[2]
D[-4]
D[2:4]
# Modificando elementos do vetor
A[2] <- 5

# Criando vetores a partir de sequências
S1 <- seq(10)       # ou S1 <- 1:10
                    # Sequência de valores, com valor máximo
                    # 10 (e valor mínimo 1, por padrão)

S2 <- seq(5,20)     # ou S2 <- 5:20
                    # Sequência de valores (com valor mínimo
                    # 5 e valor máximo 20)

S3 <- seq(3,6,0.2)  # Sequência de valores (com valor mínimo
                    # 3, valor máximo 6 e incremento 0.2.
                    # Nesse caso, o 6 não necessariamente
                    # listado, pois ele é o valore máximo).
                    # Ex: S4 <- seq(3,6,0.9)

# Criando matrizes a partir de vetores...
# ...Combinando linhas ('rows')
M <- rbind(A, B)
# resultado
> M
  [,1] [,2] [,3]
A    1    2    3
B    6    7    8

# ...Combinando colunas ('columns')
N <- cbind(A, B)
# resultado
> N
     A B
[1,] 1 6
[2,] 2 7
[3,] 3 8

# Aplicando funções a vetores
# Somatório
Soma_D = sum(D)

# Média ('Mean')
Media_D = mean(D)

# Mediana ('Median')
Mediana_D = median(D)

# Desvio padrão ('Standard deviation')
DP_D = sd(D)

# Plotando gráficos comuns
boxplot(N)
boxplot(data.frame(N))

# Para carregar um script
source('nome_do_script.R')

# Dando nomes aos campos
notas <- c(7.5, 8, 5.7)
names(notas) <- c('Joao', 'Pedro')
# Mas como um valor está faltando o resultado será...
> names(notas)
[1] "Joao"  "Pedro" NA
# Dando nomes a conjuntos de campos
names(A)[3] <- 'Carlos'

# Aumentando o vetor
notas <- c(notas, 10, 9.5, 6.5)
# Resultado
> notas
  Joao  Pedro Carlos
   7.5    8.0    5.7   10.0    9.5    6.5
# Agora os nomes faltantes estarão vazios
> names(notas)
[1] "Joao"   "Pedro"  "Carlos" ""       ""       ""

# Completando nomes
names(notas) <- c(names(notas[1:3]), 'Vivi', 'Ana', 'Mario')
# Resultado
> names(notas)
[1] "Joao"   "Pedro"  "Carlos" "Vivi"   "Ana"    "Mario" 
> notas
  Joao  Pedro Carlos   Vivi    Ana  Mario
   7.5    8.0    5.7   10.0    9.5    6.5
# Notou que no vetor names(notas) apareceu o índice [1] e no
# vetor notas não mais? É porque agora os campos tem nomes.
# Nem é necessário ficar mostrando o índice. Mesmo assim,
# você pode continuar acessando os campos pelo índice
> notas[2]
Pedro
    8
# E agora também pelo nome
> notas['Ana']
Ana
9.5

# Verificando elementos por condição
> notas > 7
  Joao  Pedro Carlos   Vivi    Ana  Mario 
  TRUE   TRUE  FALSE   TRUE   TRUE  FALSE 
# O resultado é um vetor Booleano
# (só valores TRUE, verdadeiro, ou FALSE, falso)
# E se eu quiser mostrar só os elementos maiores que 7?
# Pra fazer isso, você deve passar a condição como
# indicadora dentro dos colchetes,
# pois estes delimitam o vetor
# Resultado
> notas[notas > 7]
 Joao Pedro  Vivi   Ana
  7.5   8.0  10.0   9.5

# Para isso, tambem é possivel usar o comando which(),
# que por padrão retorna quais elementos são verdadeiros
# para uma dada condição
> which(notas > 7)
 Joao Pedro  Vivi   Ana
    1     2     4     5
# O comando mostrou os indices dos elementos maiores que 7,
# e em cima seus respectivos nomes 

[Atualização1]
Grupo brasileiro de discussão sobre R:
[Atualização1]

Você gostaria de adquirir um livro sobre R em português? Existe o "Linguagem R - Programação para a Análise de Dados", do professor português Luis Torgo.