Capítulo 1 Introdução
1.1 O que é R
O R é uma linguagem de alto nível e um ambiente para análise de dados e geração de gráficos. Alguns pensam que o R é apenas um pacote estatístico, no entanto, o R é muito mais do que isso, embora a parte estatística seja um dos pontos fortes do R.
O R tem código aberto, ou seja, pode ser modificado, aprimorado a qualquer momento por qualquer usuário. Ele foi criado em 1991, na Nova Zelândia (University of Auckland) por Ross Ihaka e Robert Gentleman.
O R está estruturado em duas partes principais, a base do R e os pacotes que podemos ir instalando.
Existem milhares de pacotes do R para as mais diversas funções, que encontramos no repositórios:
- CRAN package repository.
- Bioconductor.
Para saber como citar o R, basta usar o seguinte comando:
## To cite R in publications use:
##
## R Core Team (2023). _R: A Language and Environment for Statistical
## Computing_. R Foundation for Statistical Computing, Vienna, Austria.
## <https://www.R-project.org/>.
##
## A BibTeX entry for LaTeX users is
##
## @Manual{,
## title = {R: A Language and Environment for Statistical Computing},
## author = {{R Core Team}},
## organization = {R Foundation for Statistical Computing},
## address = {Vienna, Austria},
## year = {2023},
## url = {https://www.R-project.org/},
## }
##
## We have invested a lot of time and effort in creating R, please cite it
## when using it for data analysis. See also 'citation("pkgname")' for
## citing R packages.
Ajuda sobre o R
O R tem um sistema de ajuda bastante elaborado que lhe permitirá obter muita informação extra sobre a linguagem, bem como muitos outros aspectos. Usando a interface gráfica (RStudio), podemos obter ajuda através do menu Help Se pretende simplesmente obter ajuda sobre uma função em particular do R, a forma mais simples é usar a função help():
Além disso, disso existem muito material disponível na internet, abaixo estão alguns exemplos:
Stackoverflow https://stackoverflow.com/questions/tagged/r
Rdocumentation https://www.rdocumentation.org/
Rseek https://rseek.org/
R-bloggers https://www.r-bloggers.com/
1.2 Instalação
O primeiro passo é instalar o R. Podemos baixar a última versão em https://cran.r-project.org/ Nesse mesmo site temos a lista de pacotes disponíveis. Quando atualizamos o R, temos que instalar novamente os pacotes que tínhamos na versão anterior. Para facilitar, temos um pacote chamado installr, que permite atualizar o R, copiar e atualizar os pacotes para a nova versão.
1.3 RStudio
Apesar de podermos utilizar o R diretamente no console, o uso da interface gráfica RStudio facilta muito o uso do R. Podemos baixar o RStudio de https://posit.co/downloads/
No seguinte link tem dicas de como usar o RStudio: https://posit.co/wp-content/uploads/2022/10/rstudio-ide-1.pdf
1.4 Objetos do R
O R é uma linguagem baseada em objetos, de forma que as coisas que usamos ficam na memória do computador sob a forma de um objeto. Esses objetos recebem um nome e podem armazenar diferentes tipos de informações como números, texto, vetores, matrizes, expressões, etc.
Para armazenar algo num objeto usamos o operador de atribuição: <-
Exemplo:
Para ver o conteúdo do objeto:
## [1] 0.6
- O [1] que aparece antes do número guardado no objeto mostra o número da linha do conteúdo do objeto.
- A operação de atribuição é destrutiva no sentido que ao atribuir um novo valor a um objeto existente, vamos perder o conteúdo que ele estava armazenado anteriormente.
Também podemos atribuir expressões numéricas a objetos. O resultado de tal operação é o de que o resultado do cálculo da expressão e não a expressão propriamente dita:
## [1] 3375
- Os objetos que criamos ficam na memória do computador e se quisermos
podemos apagar um objeto.
- Podemos ver quais os objetos atualmente na memória do computador usando as funções ls() ou objects().
- Se não necessitamos de algum dos objetos podemos apagá-lo com a
função rm()
- No RStudio, podemos ver os objetos na aba environment e, se quisermos apagar todos os objetos, podemos clicar no ícone da vassoura, nesta mesma aba.
1.5 Nomes dos objetos do R
- Para darmos nome para os objetos podemos usar letras maiúsculas ou minúsculas, os dígitos 0 a 9 (exceto no início do nome), o ponto final e não podemos usar espaços.
- Lembre-se de que o R é sensível às letras maiúsculas / minúsculas, por exemplo, o nome dados é diferente de Dados.
1.6 Vetores
Um dos principais objetos do R para é o vetor.
Um vetor é uma estrutura de dados que permite armazenar um conjunto de valores do mesmo tipo (por exemplo números) sob um mesmo nome.
Esses elementos podem depois ser acessados individualmente usando um esquema de indexação.
Este tipo de estrutura de dados é bastante útil quando pretendemos armazenar várias coisas relacionadas.
Todos os vetores em R tem um modo e um tamanho.
O modo determina o tipo de valores guardado no vetor.
Em R podemos ter vetores com modo character, logical, numeric e complex.
Ou seja, podemos ter vetores para armazenar os seguintes tipos de dados: conjuntos de caracteres, valores lógicos (F ou T ou FALSE ou TRUE), números inteiros ou reais, e números complexos
Para criar vetores usamos a função c() e separamos os elementos por vírgulas. Por exemplo, para armazenar um conjunto de notas:
## [1] 4.0 7.0 10.0 9.5 7.5
- Comprimento e modo do vetor:
## [1] 5
## [1] "numeric"
- Ao criar um vetor temos que cuidar para que todos os elementos sejam do mesmo tipo (modo).
- Se criarmos um vetor com tipos diferentes, o R vai forçá-los a ser do mesmo tipo, como no exemplo a seguir:
## [1] "6" "10" "7.5" "9" "8" "nc"
O vetor criado será do tipo caracter. No exemplo anterior coloquei nc para quem não compareceu. Para resolver isso temos outra alternativa, que veremos a seguir.
- No R temos um elemento especial que é o NA.
- Este valor representa um valor desconhecido.
- Por exemplo, se temos a idade de pacientes guardados num vetor, mas não temos essa informação de um indivíduo, podemos criar esse vetor:
## [1] 23 45 NA 34
- Os elementos de um vetor podem ser acessados através de um índice:
## [1] 45
- O R permite criar vetores vazios usando a função vector():
- O tamanho de um vetor existente pode ser alterado atribuindo mais elementos a índices até agora inexistentes:
## [1] NA NA 60
1.7 Operações com Vetores
- A linguagem R permite vetorizar a maioria das suas funções. Por exemplo, a função sqrt() que serve para calcular raíz quadrada:
## [1] 3 4 5 6 7
O R pode ser usado para fazer operações aritméticas envolvendo vetores:
## [1] 25 30 35
- No entanto, se os vetores tiverem tamanhos diferentes, o R vai reciclar os valores do vetor mais curto até este atingir o tamanho do maior. Por exemplo:
## [1] 10 20 20 30
1.8 Fatores
- Quando temos variáveis categóricas, podemos usar outro tipo de objeto do R, o fator.
- Cada fator tem um conjunto de níveis. Vamos ver um exemplo. Suponhamos que pretendemos guardar o genótipo de 10 indivíduos em um vetor:
## [1] "CC" "CT" "CC" "CC" "CT" "TT" "CT" "CT" "TT" "CT"
Para transformar esse vetor de caracteres em um fator, usamos a função factor:
## [1] CC CT CC CC CT TT CT CT TT CT
## Levels: CC CT TT
- Suponha agora que temos 4 indivíduos cujo genótipo pretendemos armazenar.
- Imagine que por coincidência não aparece o genótipo TT.
- Se pretendemos que o fator resultante mantenha os 3 níveis possíveis, teremos que fazer:
## [1] CC CT CT CT
## Levels: CC CT TT
Podemos usar a função table contar o número de ocorrências de cada valor (nível):
## gt
## CC CT TT
## 3 5 2
## gt2
## CC CT TT
## 1 3 0
- Para fatores do mesmo tamanho usamos a função table() para fazer tabulações cruzadas de dois fatores.
- Usando o fator gt, com os genótipos dos indivíduos, e um novo fator com os grupos (caso x controle), podemos fazer uma tabulação cruzada entre genótipos e e grupo:
grupo <- factor(c("caso", "caso", "controle", "controle", "caso", "caso", "caso", "controle", "caso", "controle"))
table(gt, grupo)
## grupo
## gt caso controle
## CC 1 2
## CT 3 2
## TT 2 0
- Também é possível obter frequências marginais e relativas:
## gt
## CC CT TT
## 3 5 2
Frequências relativas com a função prop.table():
## grupo
## gt caso controle
## CC 0.3333333 0.6666667
## CT 0.6000000 0.4000000
## TT 1.0000000 0.0000000
## grupo
## gt caso controle
## CC 0.1666667 0.5000000
## CT 0.5000000 0.5000000
## TT 0.3333333 0.0000000
## grupo
## gt caso controle
## CC 0.1 0.2
## CT 0.3 0.2
## TT 0.2 0.0
1.9 Matrizes
Para armazenar os dados em estruturas com mais do que uma dimensão usamos as matrizes arranjam a informação em duas dimensões.
Para criar uma matriz usamos uma função específica para isso. Se quisermos criar uma matriz de 3 linhas e 4 colunas:
## [,1] [,2] [,3] [,4]
## [1,] 10 40 70 100
## [2,] 20 50 80 110
## [3,] 30 60 90 120
- Os números são colocados na matriz por coluna, mas se quisermos preencher a matriz por linhas da seguinte forma:
## [,1] [,2] [,3] [,4]
## [1,] 10 20 30 40
## [2,] 50 60 70 80
## [3,] 90 100 110 120
- Nas matrizes podemos dar nomes para linhas e colunas. Vejamos como fazer isso no exemplo anterior:
rownames(dados) <- c("caso1", "caso2", "caso3")
colnames(dados) <- c("var1", "var2", "var3", "var4")
dados
## var1 var2 var3 var4
## caso1 10 40 70 100
## caso2 20 50 80 110
## caso3 30 60 90 120
- Podemos acessar elementos individuais das matrizes usando um esquema de indexação:
## [1] 50
Ou então, usando os nomes:
## [1] 40
- As funções cbind() e rbind() podem ser usadas para juntar dois ou mais vetores ou matrizes, por colunas ou por linhas, respectivamente, como podemos ver a seguir:
## ex1 ex2
## [1,] 15 10
## [2,] 25 20
## [3,] 65 30
## [4,] 75 40
## [,1] [,2] [,3] [,4]
## ex1 15 25 65 75
## ex2 10 20 30 40
- As regras aritméticas também se aplicam as matrizes.
## ex1 ex2
## [1,] 45 30
## [2,] 75 60
## [3,] 195 90
## [4,] 225 120
1.10 Listas
- Outro objeto que temos é a lista. Na lista podemos colocar coisas variadas, que não precisam ser do mesmo tipo, modo ou tamanho.
- Os componentes de uma lista em R são sempre numerados e podem também
ter um nome associados a eles.
- Por exemplo, podemos criar uma lista com vários objetos criados anteriormente:
## [1] 23 45 NA 34
1.11 Data frame
- Um data frame é um objeto do R usado para guardar tabelas de dados de um problema qualquer.
- É muito semelhante a uma matriz, mas as suas colunas tem nomes e podem conter dados de tipo diferente, diferente da matriz.
- Um data frame pode ser visto como uma tabela de uma base de dados, em que cada linha corresponde a um registro (linha) da tabela. Cada coluna corresponde às propriedades (campos) a serem armazenadas para cada registro da tabela.
dados2 <- data.frame(idade = c(50, 45, 30, 20), genotipo = c("CC", "CT", "CT", "TT"), sexo = c("M", "F", "M", "F"))
dados2
## idade genotipo sexo
## 1 50 CC M
## 2 45 CT F
## 3 30 CT M
## 4 20 TT F
1.12 Sequências
- Para gerar dados sequenciais, em vez digitar os valores, podemos gerar sequências de várias de formas.
- Por exemplo, para criar um vetor com os números de 1 a 100, em vez de os escrevermos todos, podemos usar:
- Exemplos:
## [1] 1.000000 2.333333 3.666667 5.000000
## [1] 1 5
## [1] -2.0 -1.8 -1.6 -1.4 -1.2 -1.0 -0.8 -0.6 -0.4 -0.2
## [1] "a" "b" "c" "d" "e" "f" "g" "h" "i" "j"
- Uma outra função bastante útil para gerar sequências é a função rep():
## [1] 5 5 5 5 5 5 5 5 5 5
## [1] "sim" "sim" "sim"
## [1] 1 2 3 1 2 3
Para ler um pouco mais sobre o assunto: (Torgo 2011)