beginning r - the statiscal programming language
DESCRIPTION
Resumo do capítulo 2 do livro Beginning R - The Statiscal Programming Language. Author : Mark Gardener.TRANSCRIPT
Linguagem R
Por: Fernando Gama
Summary – Chapter 2
• Cálculos Matemáticos e estatísticos
É possível realizar cálculos dos mais simples aos mais complexos.
> 3 + 9 + 12 -7
[1] 17
> 12 + 17/2 -3/4 * 2.5
[1] 18.625
> (12 + 17/2 -3/4) * 2.5
[1] 49.375
R - Cálculos
R - Cálculos
R - Cálculos (Armazenando)
• Cálculos Matemáticos e estatísticos
Mais do que realizar cálculos é possível armazenar os resultados em objetos nomeados da seguinte forma:
object.name = mathematical.expression
Exemplo:
ans1 = 23 + 14/2 - 18 + (7 * pi/2)
Para visualizar o resultado, digite: ans1.
[1] 22.99557
R - Cálculos (Armazenando)
É possível criar mais objetos (o que acarretará em maior custo de memória).
> ans2 = 13 + 11 + (17 - 4/7)
Temos 2 resultados: ans1 e ans2 é possível manipular esses objetos com novas operações:
ans1 + ans2 / 2 (Enter para visualizar o resultado)
R - Lendo e retornando dados
Mais frequentemente nos deparamos com amostras de dados. Como criamos e retornamos essas amostras?
• Comando combine:
- comando c(): Maneira mais simples e rápida de retornar uma série de valores armazenados em um objeto.
sample.name = c(item.1, item.2, item.3, item.n)
:: numéricos:
>data1 = c(3, 5, 7, 5, 3, 2, 6, 8, 5, 6, 9)
> data1
[1] 3 5 7 5 3 2 6 8 5 6 9
R - Lendo e retornando dados
É possível incorporar resultados existentes dentro de um determinado objeto em outros objetos.
> data1
[1] 3 5 7 5 3 2 6 8 5 6 9
> data2 = c(data1, 4, 5, 7, 3, 4)
> data2
[1] 3 5 7 5 3 2 6 8 5 6 9 4 5 7 3 4
:: textos:
our.text = c(“item1”, “item2”, ‘item3’)
R - Lendo e retornando dados
Caso ocorra a mesclagem entre números e letras na entrada de dados, os números serão convertidos em texto.
> mix = c(data1, day1)
> mix
[1] "3" "5" "7" "5" "3" "2" "6" "8" "5" "6" "9" "Mon"
[13] "Tue" "Wed" "Thu" "Fri"
Conclusão: c() é útil quando a amostra de
dados é pequena.
R - Lendo e retornando dados
• Comando scan:
Realiza operação similar ao comando c(). A diferença é que não há necessidade de entrar com os valores entre (), separados por vírgula.
our.data = scan()
:: Númérico:
> data3 = scan()
1: 6 7 8 7 6 3 8 9 10 7
11: 6 9
13:
R - Lendo e retornando dados
((Continuando...))
13:
Read 12 items
> data3
[1] 6 7 8 7 6 3 8 9 10 7 6 9
Funcionamento: primeira linha novo objeto é criado; em
seguida é realizada a entrada de dados e o enter é
pressionado. Veja que ele não retornou o resultado,
continuando a execução.
Por fim, só há a interrupção quando a próxima
linha(4) não receba nenhum dado e o enter for
pressionado.
R - Lendo e retornando dados
:: Texto: você precisa dizer ao R que deseja trabalhar com letras em vez de números.
scan(what = 'character')
Exemplo:
> day2 = scan(what = 'character')
1: Mon Tue Wed
4: Thu
5:
Read 4 items
Nota: Não há necessidade de inserar aspas
na entrada de dados.
R - Lendo e retornando dados
• É possível utilizar da facilidade do comando scan() para abrir arquivos, para isso é necessário verificar de que maneira os dados estão separados.
• Por exemplo, se os dados estão separados por espaços, simplesmente copiamos e colamos, caso contrário é necessário informar ao R qual separador está sendo utilizado. Em um arquivo CSV, os dados são separados por vírgulas.
data4 = scan(sep = ',')
1: 3, 4, 5.2, 9
5: 11, 13.1
7:
Read 6 items
R - Lendo e retornando dados
• Exibindo os dados:
> data4
[1] 3 4 5.2 9 11 13.1
• Dados tabulados, especifique: scan(sep = '\t')
• Dados textuais, especifique: scan(sep = ',', what = 'char')
Aceitar abreviações
R - Lendo e retornando dados
• Lendo um arquivo de dados de um disco:
Considerando que o arquivo é separado por espaços.
> data6 = scan(file = 'test data.txt')
Read 9 items
data6
[1] 23.0 17.0 12.5 11.0 17.0 12.0 14.5 9.0 11.0
A busca é feita no diretório padrão, você pode
encontrar o seu diretório padrão por meio
do comando:
getwd()
R - Lendo e retornando dados
• Lendo um arquivo de dados de um disco:
Considerando que o arquivo é separado por espaços.
> data6 = scan(file = 'test data.txt')
Read 9 items
data6
[1] 23.0 17.0 12.5 11.0 17.0 12.0 14.5 9.0 11.0
A busca é feita no diretório padrão, você pode
encontrar o seu diretório padrão por meio
do comando:
getwd()
R - Lendo e retornando dados
• Verificar e listar os diretórios
dir() ou list.files()
• Você pode alterar o diretório de trabalho utilizando o comando setwd(), passando como parâmetro entre aspas o caminho desejado:
setwd('pathname')
• Você pode abrir uma janela para navegar nos diretórios e escolher o arquivo desejado por meio do comando:
scan(file.choose()) - arquivos separados por espaços.
scan(file.choose(), what = 'char', sep = ',')
R - Lendo e retornando dados
• Na maioria dos casos os datasets podem ser muito grandes. Neste caso, o ideal é utilizar o comando read.csv().
• Este comando pode receber vários parâmetros adicionais, como se pode ver abaixo:
read.csv(file, sep = ',', header = TRUE, row.names)
• A novidade fica por conta do parâmetro header – lê a primeira linha do arquivo CSV e insere o nome para cada coluna, por default é TRUE.
• Row.names permite que se especifique nomes
de linhas para os dados.
R - Lendo e retornando dados
• Outros comandos alternativos para leitura de dados:
read.table() - comando básico para leitura de dados; capaz de ler a maioria dos formatos de dados de texto simples.
• Assumindo que a separação é por espaços.my.ssv = read.table(file.choose(), header = TRUE)
• Assumindo que a separação é tabular por valoresmy.tsv = read.table(file.choose(), header = TRUE, sep = '\t')
read.delim(), read.csv(), read.table():
todos realizam a mesma função.
R - Lendo e retornando dados
• Para obtenção de dados é muito importante ter o cheklist(listado abaixo) em mente:
1. Verifique o formato dos dados assim como qual é o separador.
2. Procure ver se as colunas estão rotuladas.
3. Utilize o comando mais apropriado read.xxx() - read.csv é o mais utilizado.
4. Você pode utilzar a instrução file.choose() para salvar. (a menos que o S.O seja linux.
5. Certifique o nome escolhido para seus dados
seja curto e significativo.
6. Se os dados possuem nomes de linha,
utilizar row.names.
R - Lendo e retornando dados
• Arquivos não preenchidos totalmente:
Na maioria dos casos, no mundo real recebemos amostras incompletas. Quando os dados são lidos dentro do R, ele insere nos itens não preenchidos a sigla NA(Not Available).
Exemplo:
> grass = read.csv(file.choose())
> grass
mow unmow
1 12 8
2 15 9
3 17 7
4 11 9
5 15 NA
R - Visualizando objetos nomeados
• R é orientado a objetos, logo ele espera encontrar coisas nomeadas para manipular de alguma maneira.
• Visualizando e carregando objetos
ls() / objects(): lista todos objetos nomeados disponíveis.
A listagem dos objetos segue a ordem alfabética e maiúsculas acima das minúsculas.
Caso não se tenha objetos nomeados ao digitar ls(), o comando abaixo aparecerá:
character(0)
R - Visualizando objetos nomeados
• Imagine que você tenha uma grande quantidade de objetos e você deseja filtrar pelo nome que se deseja. É possível limitar a visualização utilizando o comando abaixo:
> ls(pattern = 'b')
[1] "bare" "beetle.cca" "beta"
[4] bf.lm" "biol" "prob2odd" "tab.est"
• O pattern filtra todas as palavras que contenham a letra “b”.
> ls(pattern = 'be'): todas as palavras que
tenha “be”.
[1] "beetle.cca" "beta" "bf.beta"
R - Visualizando objetos nomeados
• Caso você deseja encontrar nomes de objetos que começem com uma letra insira ^ no início.
> ls(pattern = '^b')
[1] "bare" "beetle.cca" "beta"
> ls(pattern = '^be')
[1] "beetle.cca" "beta"
• Caso queiramos isolar cada letra e fazer uma pesquisa, sabendo que o objeto as tenha fazemos assim:
> ls(pattern = '^[be]')
ou
> ls(pattern = '^b|^e')
R - Visualizando objetos nomeados
• Agora, se desejamos encontrar objetos apenas tendo em mente o caracter final que ele contém podemos fazer:
> ls(pattern = 'm$')
[1] "bf.lm" "but.lm" "cbh.glm" "dep.pm"
• Removendo objetos do R
É possível remover permanentemente o objeto da memória utilizando os comandos rm() ou remove().
rm(nomeObjeto) ou remove(nomeObjeto)
• Podemos ser mais específicos:
> rm(list = ls(pattern= '^b'))
R - Visualizando objetos nomeados
• Tipos de Itens da dados
:: Number data:
– a) números inteiros: integer.[1] 6 7 8 7 6 3 8 9 10 7 6 9
– b) números decimais: numeric.[1] 23.0 17.0 12.5 11.0 17.0 12.0 14.5 9.0 11.0
:: Text Items:
– a) textos simples: character[1] "Jan" "Feb" "Mar" "Apr" "May"
– b) não possui aspas: factor[1] mow mow mow unmow unmow
Levels: mow unmow
R - Conversão entre números e textos
• Considerando dados como factor.
:: as.character(): comando é usado para converter textos simples.
:: as.factor(): converte novamente para factor.
> cut
[1] mow mow unmow unmow
Levels: mow unmow
> cut2 = as.character(cut)
[1] “mow” “mow” “unmow” “unmow”
> cut3 = as.factor(cut2)
[1] mow mow unmow unmow
Levels: mow unmow
R - Conversão entre números e textos
• É possível fazer algo similar quando se trabalha com números.
:: as.integer(): converte para inteiro.
:: as.numeric(): converte para numero.
> data7
[1] 7.4 12.5 12.1 13.2
> data7i = as.integer(data7)
data7i
[1] 7 12 12 13
> data7n = as.numeric(data7i)
data7n
[1] 7 12 12 13
R - Conversão entre números e textos
NOTA: Uma vez que as casas decimais foram perdidas você não poderá criá-las assim que a informação é perdida.
R - Conversão entre números e textos
Outras conversões podem ser realizadas.
-> número para texto-> texto para número
R - Estrutura dos dados
• Veremos pelo menos quatro estruturas diferentes para armazenar esses dados:
• Vetores
• Matrizes
• Data frames
• Lista
R - Estrutura dos dados
• VetorÉ um objeto unidimensional.
Exemplo:
> vetor1
[1] “jan” “fev” “mar” “abr”
> vetor2
[1] 23.0 17.0 12.5 11.0
> fator
[1] mow mow mow unmow unmow
Levels: mow unmow
R - Estrutura dos dados
• Data FramesÉ um objeto bidimensional, contendo linhas e colunas.
> grass mow unmow
1 12 8
2 15 9
3 17 7
4 11 9
5 15 NA
R - Estrutura dos dados
• MatrizÉ um objeto de dados bidimensional.
> birdGarden Hedgerow Parkland
BlackBird 47 10 40
Robin 9 3 5
• Matriz só poderá conter o mesmo tipo de
dados. Consiste de uma única linha e
uma única coluna.
R - Estrutura dos dados
• ListaÉ uma série de itens agrupados que formam um único objeto.
> grass.l
$mow
[1] 12 15 17 11 15
$unmow
[1] 8 9 7 9
• A lista é um objeto flexível porém,
mas difícil de lidar.
R - Salvando seus dados
Muitas vezes é útil criar diferentes diretórios haja vista que, você tem uma mistura de resultados e itens de dados. Existem muitas maneiras de salvar seu trabalho.
• Salvando o workspace na saída.Ao finalizar sua tarefa no R, uma pergunta surge – se você
deseja salvar seu workspace. Um bom hábito, é dizer y (yes). Assim o R salvará, todos os objetos dentro do workspace padrão.
R - Salvando seus dados
Porém, você pode salvar os arquivos em lugares diferentes. Isto é bastante útil quando você está trabalhando com outros projetos, ou mesmo quando você deseja organizar seus dados.
• R fornece uma solução para o caso::: comando save():
save(list, file='nomeArquivo').
• list :
nome dos objetos(separados por vírgula)
ou
linkar lista de nomes criadas.
R - Salvando seus dados
> save(bf, bf.lm, bf.beta, file = 'Desktop/butterfly.RData')
> save(list = ls(pattern = '^bf'), file ='Desktop/butterfly.RData')
É possível especificar uma lista desta maneira:
> mylist = c('bf', 'bf.beta', 'bf.lm')
> save(list = mylist, file = 'Desktop/butterfly.RData')
Caso deseje salvar TODOS os objetos em vez de digitá-lo um a um, o R ti permite fazer isto de duas maneiras:
save(list = ls(all=TRUE), file = 'filename')
save.image(file = 'filename')
R - Leitura dos dados
Um arquivo no disco é salvo no formato binário. Ou seja, um processador ou editor de texto não será capaz de lê-lo, porém dentro do R é possível ler este arquivo.
load(file='filename.RData')
load(file = file.choose())
R - Salvando dados como arquivos de texto
Comandos para transferir dados para uma formato diferente do R:
write.table(), write.csv() e cat()
Qual utilizar?
- Vetor único: write() ou cat().
- Vetores com múltiplas colunas e dados: write.table() ou write.csv().
write(x, file = "data", ncolumns = if(is.character(x)) 1 else 5, sep = " ")
Tipo de dados: se for texto retorna uma única coluna;
Se os dados forem numéricos 5 colunas são criadas
(é possível customizar customizar).
data = c(1:5)
write(x, file=''Desktop/data.txt”, sep=',')
R - Salvando dados como arquivos de texto
Comando write.table(): matriz de objetos ou um data frame
write.table(mydata, file='nomeArquivo', row.names =TRUE), sep = ' ', col.names = TRUE)
write.csv(mydata, file='nomeArquivo', row.names =TRUE), sep = ' ', col.names = TRUE)
Úteis para manipular dados complexos com múltiplas colunas presentes por exemplo, em uma planilha.
Obs: uma lista de objetos também poderia ser utilizada.
Resumo- R pode funcionar como uma simples calculadora realizando operações matemáticas básicas.
- É possível armazenar esse resultado em uma variável.
- Pode-se criar um objeto de dados via teclado, área de transferência ou arquivos externos por meio dos comandos: c(), scan(), read.csv().
- Lista-se os objetos por meio do comando ls(), remove-se utilizando o comando rm().
- Existem diferentes tipos de dados(numéricos e caracter). Estes podem ser vetores(unidimensional) ou matrizes e dataframes(bidimensional) e objetos armazenados e listas.
- O R disponibiliza um comando para verificar o histórico,
assim como se pode salvar as listas dos comandos
em um arqvuivo.
- É possível salvar dados no R utilizando o comando
save() e outros comandos que o R disponibiliza.
Referências
Capítulo 2 do livro “Beginning R – The Statistical Programming Langage”. Author: Dr. Marker Gardener.