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/
# Load the tidyverse package
library(tidyverse)
# Load the msleep dataset
data(msleep)
# Check the structure of the msleep dataset
str(msleep)
nrow(msleep)
ncol(msleep)
head(msleep)
# Are there NA values? How many?
any(is.na(msleep))
sum(is.na(msleep))
# Leave out any observation with NA values
msleep %>%
drop_na()
#Equal to do:
#drop_na(msleep)
# Is there a relationship between sleep total and sleep rem?
# How can we check that?
# Plotting maybe?
plot(msleep$sleep_total, msleep$sleep_rem)
# Correlation coefficient can be computed using the functions cor()
cor.test(msleep$sleep_total, msleep$sleep_rem, method = "pearson", use = "complete.obs")
#Comparing means
t.test(msleep$sleep_total, msleep$sleep_rem)
# Using tidyverse
msleep %>%
ggplot(aes(x = sleep_total, y = sleep_rem)) +
geom_point()
#Directly calling ggplot
ggplot(msleep, aes(x = sleep_total, y = sleep_rem)) +
geom_point()
#Saving plots
g <- ggplot(msleep, aes(x = sleep_total, y = sleep_rem)) +
geom_point()
ggsave(filename = "test.pdf", plot = g)
#Other alternative
pdf("test2.pdf")
g
dev.off()
# Add a custom y-axis title
msleep %>%
ggplot(aes(sleep_total, sleep_rem)) + # Implicit or explicit arguments?
geom_point() +
xlab("Total sleep time (h)") +
ylab("REM sleep time (h)")
msleep %>%
ggplot(aes(sleep_total, sleep_rem)) +
geom_point(color = "red") + #visit: color-hex.com to select it
xlab("Total sleep time (h)") +
ylab("REM sleep time (h)")
# How can we colour the points by vore?
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
msleep %>%
ggplot(aes(vore, sleep_total)) +
geom_boxplot()
msleep %>%
filter(!(is.na(msleep$vore))) %>%
ggplot(aes(vore, sleep_total, fill = vore)) +
geom_boxplot()
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")