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:

citation()
## 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.

(R Core Team 2023)

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():

help(sqrt)

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:

x1 <- 0.6

Para ver o conteúdo do objeto:

x1
## [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:

x2 <- 15
x3 <- x2^3
x3
## [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:

notas <- c(4, 7, 10, 9.5, 7.5)
notas
## [1]  4.0  7.0 10.0  9.5  7.5
  • Comprimento e modo do vetor:
length(notas)
## [1] 5
mode(notas)
## [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:
notas2 <- c(6, 10, 7.5, 9, 8, "nc")
notas2
## [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:
idade<- c(23, 45, NA, 34)
idade
## [1] 23 45 NA 34
  • Os elementos de um vetor podem ser acessados através de um índice:
idade[2]
## [1] 45
  • O R permite criar vetores vazios usando a função vector():
x4 <- vector()
  • O tamanho de um vetor existente pode ser alterado atribuindo mais elementos a índices até agora inexistentes:
x4[3] <- 60
x4
## [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:
x5 <- c(9, 16, 25, 36, 49)
x5 <- sqrt(x5)
x5
## [1] 3 4 5 6 7

O R pode ser usado para fazer operações aritméticas envolvendo vetores:

x6 <- c(5, 10, 15)
x7 <- c(20, 20, 20)
x6 + x7
## [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:
x8 <- c(5, 10, 15, 20)
x9 <- c(5, 10)
x8 + x9
## [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:
gt <- c("CC", "CT", "CC", "CC", "CT", "TT", "CT", "CT", "TT", "CT")
gt
##  [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:

gt <- factor(gt)
gt
##  [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:
gt2 <- factor(c("CC", "CT", "CT", "CT"), levels = c("CC", "CT","TT"))
gt2
## [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):

table(gt)
## gt
## CC CT TT 
##  3  5  2
table(gt2)
## 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:
tabela <- table(gt, grupo)
margin.table(tabela, 1)
## gt
## CC CT TT 
##  3  5  2

Frequências relativas com a função prop.table():

prop.table(tabela, 1)
##     grupo
## gt        caso  controle
##   CC 0.3333333 0.6666667
##   CT 0.6000000 0.4000000
##   TT 1.0000000 0.0000000
prop.table(tabela, 2)
##     grupo
## gt        caso  controle
##   CC 0.1666667 0.5000000
##   CT 0.5000000 0.5000000
##   TT 0.3333333 0.0000000
prop.table(tabela)
##     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:

dados <- matrix(c(10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120), 3, 4)
dados
##      [,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:
dados2 <- matrix(c(10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120), 3, 4, byrow = T)
dados2
##      [,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:
dados[2, 2]
## [1] 50

Ou então, usando os nomes:

dados["caso1", "var2"] 
## [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 <- c(15, 25, 65, 75)
ex2<-c(10, 20, 30, 40)

m1<-cbind(ex1, ex2)
m1
##      ex1 ex2
## [1,]  15  10
## [2,]  25  20
## [3,]  65  30
## [4,]  75  40
m2<-rbind(ex1, ex2)
m2
##     [,1] [,2] [,3] [,4]
## ex1   15   25   65   75
## ex2   10   20   30   40
  • As regras aritméticas também se aplicam as matrizes.
m1 * 3
##      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:
lt <- list(idade, gt, dados)
lt[[1]] 
## [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:
x <- 1:100
  • Exemplos:
seq(from = 1, to = 5, length = 4)
## [1] 1.000000 2.333333 3.666667 5.000000
seq(from = 1, to = 5, length = 2)
## [1] 1 5
seq(length = 10, from = -2, by = 0.2)
##  [1] -2.0 -1.8 -1.6 -1.4 -1.2 -1.0 -0.8 -0.6 -0.4 -0.2
letters[1:10]
##  [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():
rep(5, 10)
##  [1] 5 5 5 5 5 5 5 5 5 5
rep("sim", 3)
## [1] "sim" "sim" "sim"
rep(1:3, 2)
## [1] 1 2 3 1 2 3

Para ler um pouco mais sobre o assunto: (Torgo 2011)

References

R Core Team. 2023. R: A Language and Environment for Statistical Computing. Vienna, Austria: R Foundation for Statistical Computing. https://www.R-project.org/.
Torgo, Luı́s. 2011. “Introdução à Programação Em r.”