R é uma linguagem de programação poderosa para análise de dados, gráficos e, especialmente, análise estatística. Está disponível gratuitamente ao público em www.r-project.org com binários de fácil instalação para Linux, MacOS e Windows. Este caderno oferece uma introdução ao R, projetado para estudantes e pesquisadores. Não é necessária experiência prévia, embora alguma familiaridade com linguagens de script como Bash, Matlab ou Python seja útil.
A melhor opção para programar em R é instalar o RStudio ou o Visual Studio Code. Aqui, aprenderemos alguns dos fundamentos do R e como carregar e processar dados.
Ao começar em R (ou em qualquer linguagem de programação), passamos por três habilidades fundamentais:
comentários são partes de um programa de computador usadas para descrever um trecho de código. Podemos fazer um comentário usando o símbolo #.
Finalidade dos comentários? Legibilidade, ignorar algum código, pseudocódigo
# Tudo que começa com # é um comentário e não é executado
# Isso serve para explicar o que o código faz
# ou para deixar anotações ou lembretes
# ou para desativar uma linha de código
# ou para deixar um código mais legível ou organizado
Diferentes tipos de valores, como caracteres, números ou lógicos, podem ser atribuídos a uma variável.
x <- 10 # A forma mais comum de atribuição
y = 20 # Também funciona
No R (e em praticamente todas as linguagens de programação), espaços em nomes de variáveis não são permitidos. Se você tentar escrever: idade do paciente <- 25
O R vai dar erro, porque ele vai entender que você está tentando usar a variável idade, chamar a função do, acessar paciente… uma confusão total.
Você pode usar o underscore (_) ou o ponto (.) ou camelCase para separar palavras em nomes de variáveis, como:
idade_do_paciente <- 25
idade.do.paciente <- 25
IdadeDoPaciente <- 25
Ou seja, sempre que for criar uma variável, evite espaços e use caracteres permitidos. Perceba que mesmo cada jeito de escrever são aceitáveis, mas cada um cria uma variável diferente.
Quando falamos ou escrevemos com outras pessoas, entedemos pequenos erros, variações de linguagem e escritas erradas. O R não é assim.
No R, "idade", "Idade", "idades" e "Idades" são nomes completamente diferentes. Isso porque a linguagem é case-sensitive (sensível a maiúsculas e minúsculas).
E cada variável deve ser única dentro do mesmo ambiente de trabalho, ou seja cada vez que eu escrevo de um jeito diferente, eu crio um objeto novo. Isso é importante porque evita confusões e garante que você saiba exatamente qual variável está usando.
Por isso, crie nomes de variáveis que façam sentido e sejam fáceis de lembrar e sejam diferentes o suficiente para que VOCÊ possa trabalhar.
Regras para nomear variáveis:
Essa seta é usada para atribuir um valor a um objeto. É como dizer: “coloque esse valor aqui dentro dessa caixinha”. ou "x agora vale 10 e y agora vale 20".
Mas a seta "<-" é a forma tradicional e mais usada pela comunidade R, especialmente em estatística e ciência de dados. É como uma tradição da linguagem — muitos dizem que a seta aponta de onde vem o valor e para onde ele vai.
No teclado, para fazer <-, você digita < e depois -, e o R automaticamente entende como uma atribuição.
No R, os dados geralmente são organizados em tabelas (data frames), que parecem planilhas de Excel. Cada coluna representa uma variável (idade, nome, altura...) e cada linha representa uma observação (uma pessoa, um animal, um experimento...).
Você pode criar dados manualmente:
# Existem vários tipos de dados em R, mas os mais comuns são:
# Números
x <- 10.5 # Números decimais
#Integer
y <- 5L # Números inteiros
# Texto (chamamos de "strings")
nome <- "meu nome é:" # Texto entre aspas (complete com seu nome)
# Lógicos (booleanos)
verdadeiro <- TRUE # Verdadeiro
falso <- FALSE # Falso
# Vetores
idades <- c(25, 30, 35) # Vetor de números
c() é uma função que significa "combine" ou "concatenate", usada para criar vetores.
Todos os elementos de um vetor devem ser do mesmo tipo. Se não utilizar o c(), o R não vai entender que você quer criar um vetor e vai dar erro. Quando você usa c(), o R entende que você está juntando esses valores em um único objeto, formando um vetor.
Sempre que você quiser criar um vetor com VÁRIOS valores, seja números, textos ou lógicos.
Um data.frame é como uma planilha de Excel: cada coluna é uma variável e cada linha é uma observação. Você pode importar do seus dados pessoais ou construir dentro do R.
my_dataframe <- data.frame(
Name = c("Camila", "Matias", "Juan"),
Age = c(21,33,19),
Student = c(TRUE, FALSE, TRUE)
)
my_dataframe
Uma matriz é uma tabela só de números (ou de um único tipo de dado), organizada em linhas e colunas, como em matemática.
m <- matrix(1:9, nrow = 3, ncol = 3)
m
Em programação, strings são sequências de caracteres — ou seja, qualquer conjunto de letras, números, símbolos ou espaços. Elas são usadas para representar textos.
# Finding the length of a string
nchar(my_string1)
# Joining strings together
paste(my_string1, "2023")
#Splitting strings
txt<-("R is the statistical analysis language")
unlist(strsplit(txt, split = " "))
Um vetor é uma estrutura básica que armazena uma coleção de elementos do mesmo tipo — pode ser números, textos (strings), valores lógicos (TRUE/FALSE), etc. Vetores podem fazer operações como: somar, filtrar, comparar etc.
# Vector
my_vector1 <- c(1,2,3)
my_vector2 <- c(4,5,6)
another_vector <- c("Camila", "Matias", "Juan")
class(my_vector1)
my_vector1
class(another_vector)
another_vector
# Creating vectors with R functions
my_name <- rep("Alejandra", times = 5)
my_name
my_seq <- rep(c(1,3,5), times = 3)
my_seq
my_seq <- rep(c(1,3,5), each = 3)
my_seq
my_seq <- -10:10
my_seq
my_seq <- seq(from = -10, to = 10, by = 2)
my_seq
Uma lista é um “bolsão” que pode guardar qualquer coisa: números, textos, vetores, data.frames, até funções!
Pense numa lista de compras: Sabão, Amacianete, Maçã, Laranja, Biscoito, Pão etc...
Perceba que os itens não fazem parte das mesmas categorias (comida, itens de limpeza, produtos de higiene), mas todos estão na mesma lista. Funciona de forma similar no R:
my_list <- list(City = "Salvador", Age = 476, Beaches = c(Barra, Itapuã, Piatã, Ribeira))
my_list
Um fator é usado para representar variáveis categóricas, como “sexo”, “estado civil”, “resposta: sim/não”. Por trás, o R trata esses valores como níveis numéricos com nomes.
sex <- factor(c("F", "M", "F"))
O R entende isso como uma variável com dois níveis: “F” e “M”.
Fatores são essenciais em análises estatísticas porque eles tratam categorias como níveis diferenciados, e não apenas texto qualquer.
R é uma linguagem criada por matemáticos para resolver problemas estatísticos e matemáticos. Por isso, realizar operações nessa linguagem é bastante semelhante ao que já conhecemos em matemática tradicional.
my_result <- 2 + 3
1 - my_result
6 * 4
2 ^ 3
10 / 5
log10(1000)
log2(32)
sqrt(144)
my_vector1
my_vector2
# Finding the length of a vector
length(my_vector1)
# Math
my_vector1 * my_vector2
my_vector1 + my_vector2
my_vector1 - my_vector2
my_vector1 / my_vector2
# Indexing is a way to select (include/exclude) particular elements from a variable
my_vector2
my_vector2[1]
my_vector2[-c(1,3)]
my_vector2[2:3]
my_vector2[c(1,3)] # First and third only
# Create a vector with some random values
some_values <- c(8, 6, 1, 12, 3)
mean(some_values)
median(some_values)
sort(some_values)
# Quartiles (25% vs 75%)
quantile(some_values, 0.25)
quantile(some_values, 0.75)
# Interquartile range
IQR(some_values)
# Standard deviation
#In R, the standard deviation and the variance are computed as if the data represent a sample (n - 1)
sd(some_values)
# Variance
var(some_values)
Pacotes são coleções de funções prontas que ajudam a fazer tarefas específicas. Por exemplo:
# 1. Instalar (apenas uma vez):
install.packages("ggplot2")
# 2. Carregar (toda vez que vocês for usar):
library(ggplot2)
Funções são comandos prontos que fazem alguma coisa pra você, você já viu alguams acima. Elas seguem a estrutura:
nome_da_função(argumento1, argumento2, ...)
#Por exemplo:
mean(c(1, 2, 3, 4))
Quando usamos uma função no R, precisamos passar para ela as informações necessárias para que ela saiba o que fazer. Essas informações são chamadas de argumentos — pense nelas como as etapas de um experimento.
round(3.14159, digits = 2)
Existem várias formas de criar gráficos no R, mas nesta aula vamos focar no pacote ggplot2, uma ferramenta poderosa e elegante para visualização de dados. Ele se baseia na chamada gramática dos gráficos, que permite construir gráficos de forma estruturada e intuitiva — como se estivéssemos escrevendo frases com sentido.
A gramática dos gráficos é um conjunto de regras que define como construir visualizações de forma lógica e padronizada. A grande vantagem é que, ao seguir essa gramática, você aprende uma estrutura única que serve para criar diversos tipos de gráficos — sem precisar decorar argumentos diferentes para cada um.
Esse pacote se destaca porque te dá controle total sobre o gráfico: você decide cada parte — eixos, cores, tipos de visualização, títulos, legendas… tudo pode ser adicionado e ajustado com camadas. Isso torna seus gráficos mais personalizados e informativos.
Os três componentes principais da gramática de gráficos são:
Recursos úteis
o PDF da documentação: https://cran.r-project.org/web/packages/ggplot2/ggplot2.pdf
Aqui o link para o site: https://ggplot2.tidyverse.org/
E aqui o link para o livro: https://ggplot2-book.org/
# Carregar o pacote tidyverse
library(tidyverse)
# Carregar o conjunto de dados msleep
data(msleep)
# Verificar a estrutura do conjunto de dados msleep
str(msleep)
# Funções exploratórias básicas
#nrow: número de linhas
#ncol: número de colunas
#head: primeiras linhas
nrow(msleep)
ncol(msleep)
head(msleep)
# Existem valores NA? Quantos?
any(is.na(msleep))
sum(is.na(msleep))
# Ignorar qualquer observação com valores NA
msleep %>%
drop_na()
# Equivalente a:
#drop_na(msleep)
# Existe alguma relação entre o tempo total de sono e o sono REM?
# Como podemos verificar isso?
# Talvez através de um gráfico?
plot(msleep$sleep_total, msleep$sleep_rem)
# O coeficiente de correlação pode ser calculado usando as funções cor()
cor.test(msleep$sleep_total, msleep$sleep_rem, method = "pearson", use = "complete.obs")
#Comparando médias
t.test(msleep$sleep_total, msleep$sleep_rem)
# Usando tidyverse
msleep %>%
ggplot(aes(x = sleep_total, y = sleep_rem)) +
geom_point()
#Chamando o ggplot diretamente
ggplot(msleep, aes(x = sleep_total, y = sleep_rem)) +
geom_point()
# Salvando o gráfico
g <- ggplot(msleep, aes(x = sleep_total, y = sleep_rem)) +
geom_point()
ggsave(filename = "test.pdf", plot = g)
# Outra alternativa
pdf("test2.pdf")
g
dev.off()
# Adicione um título personalizado para o eixo y
msleep %>%
ggplot(aes(sleep_total, sleep_rem)) + # Argumentos implícitos ou explícitos?
geom_point() +
xlab("Total sleep time (h)") +
ylab("REM sleep time (h)")
msleep %>%
ggplot(aes(sleep_total, sleep_rem)) +
geom_point(color = "red") + #Visite color-hex.com para selecionar
xlab("Total sleep time (h)") +
ylab("REM sleep time (h)")
#Como podemos colorir os pontos?
str(msleep)
msleep %>%
ggplot(aes(sleep_total, sleep_rem, color = vore)) +
geom_point() +
xlab("Total sleep time (h)") +
ylab("REM sleep time (h)")
# Base R
boxplot(sleep_total ~ vore, data = msleep)
# ggplot2
# gemboxplot: plotar como boxplot
msleep %>%
ggplot(aes(vore, sleep_total)) +
geom_boxplot()
# Filtrando valores NA
# Fill: cores baseadas em categorias (vore)
msleep %>%
filter(!(is.na(msleep$vore))) %>%
ggplot(aes(vore, sleep_total, fill = vore)) +
geom_boxplot()
# geom_jitter: adicionar pontos individuais
# Color: cores baseadas em categorias (vore)
# labs: adicionar rótulos aos eixos e legenda
msleep %>%
filter(!(is.na(msleep$vore))) %>%
ggplot(aes(vore, sleep_total)) +
geom_boxplot() +
geom_jitter(aes(color=vore)) +
labs(x= "Diet", y = "Total sleep time (h)", color ="Diet type")