1 + 1 # Soma
[1] 2
1 - 1 # Subtração
[1] 0
2 * 3 # Multiplicação
[1] 6
10 / 2 # Divisão
[1] 5
2 ^ 3 # Potenciação
[1] 8
Existem muitos conceitos básicos que são fundamentais para quem está começando a programar em R.
Nesta aula, vamos abordar algun conceitos considerados mais importantes para as próximas aulas.
O R permite realizar operações matemáticas básicas, como soma, subtração, multiplicação, divisão, potenciação, entre outras.
[1] 2
[1] 0
[1] 6
[1] 5
[1] 8
A ordem matemática das operações também vale no R. Por exemplo, a expressão 2 + 3 * 4
será calculada como 2 + (3 * 4)
:
No R, um objeto é uma estrutura de dados que armazena valores: podemos armazenar um valor único, um conjunto de valores, uma base de dados, entre outros.
É muito útil armazenar valores em objetos, pois podemos reutilizá-los em diferentes partes do código, sem precisar digitar o valor novamente.
Existem alguns objetos já criados no R, como por exemplo o objeto letters
, que armazena as letras do alfabeto:
[1] 3.141593
[1] "a" "b" "c" "d" "e" "f" "g" "h" "i" "j" "k" "l" "m" "n" "o" "p" "q" "r" "s"
[20] "t" "u" "v" "w" "x" "y" "z"
O R é case-sensitive, ou seja, ele diferencia letras maiúsculas de minúsculas. Portanto, nome
é diferente de Nome
.
Por exemplo, o objeto pi
armazena o valor de π (com um número limitado de casas decimais). O nome do objeto é escrito em minúsculas:
Se tentarmos acessar o objeto com o nome em maiúsculas, o R irá retornar um erro, pois esse objeto não existe:
Para criar um objeto, precisamos definir um nome, e atribuir um valor à este nome. Para isso, usamos o operador de atribuição: <-
. Um atalho para esse operador é o Ctrl
+ -
no Windows, ou Option
+ -
no Mac .
No exemplo a seguir, criamos um objeto chamado nome_do_curso
e atribuímos a ele o texto "Introdução à análise de dados no R"
:
Podemos acessar o valor armazenado em um objeto digitando o nome do objeto:
O objeto apenas será alterado se utilizarmos o operador de atribuição novamente. Por exemplo, a função tolower()
transforma todas as letras de um texto em minúsculas:
Mas como não utilizamos a atribuição, o objeto nome_do_curso
não foi alterado:
Para alterar o objeto, precisamos atribuir o resultado da função tolower()
ao objeto nome_do_curso
:
Agora, o objeto nome_do_curso
foi alterado:
Portanto, cuidado: ao criar um objeto com nome igual à outro objeto existente, o objeto anterior será substituído pelo novo objeto.
Para consultar os objetos criados, podemos usar a função ls()
(list objects), que lista todos os objetos criados no Painel Environment:
Outra forma é consultar o Painel Environment no RStudio, que exibe todos os objetos criados, e permite acessar o valor de cada objeto:
Caso queira remover um objeto, podemos usar a função rm()
(remove objects). Por exemplo, para remover o objeto nome_do_curso
:
Podemos consultar novamente os objetos existentes e verificar se o objeto foi removido:
Caso queira remover todos os objetos carregados, podemos usar a função rm(list = ls())
.
A configuração padrão do RStudio define que, quando fechamos o RStudio, o R salva todos os objetos criados em um arquivo chamado .RData
1. Na próxima vez que o RStudio for aberto, os objetos serão carregados automaticamente.
Porém isso não é uma boa prática. O importante é desenvolver um script que tenha todos os passos necessários para reproduzir os resultados, e não depender de objetos salvos em um arquivo como o .RData
.
Para desabilitar essas configurações, no menu Tools > Global Options > General:
Desmarcar a opção Restore .RData into workspace at startup;
Em Save workspace to .RData on exit, selecionar Never.
Desmarcar a opção Always save history (even when not saving .RData).
Após desativar essa opção, o RStudio não carregará os objetos salvos no .RData
na próxima vez que for aberto. Dessa forma, se quisermos apagar todos os objetos, podemos reiniciar a sessão do R (clicando em Session > Restart R no menu superior do RStudio).
Existem regras e boas práticas para nomear objetos no R. As regras são obrigatórias: se não seguirmos, o código irá gerar um erro. As boas práticas são recomendações, com o objetivo de evitar erros futuros, e facilitar a leitura do código.
Recomendamos seguir essas recomendações não apenas para o nome dos objetos, mas também para nome de pastas e arquivos, nome de colunas, entre outros.
1objeto
não é um nome válido._
). Ex: _objeto
não é um nome válido.-
), pois o R interpreta o traço como um operador de subtração. Ex: meu-objeto
não é um nome válido.O nome não deve começar com um ponto. Isso não gerará um erro, porém é contra-indicado pois essa sintaxe é utilizada para nomear objetos ocultos no R (portanto, não aparecerá no Painel Environment), e isso pode dificultar o acesso posteriormente. Ex: .objeto
não deve ser usado.
Não utilizar acentos, cedilhas, ou outros caracteres especiais. Isso pode gerar problemas de compatibilidade com outros sistemas (chamamos de encoding). Ex: aviões
não é um nome recomendado.
Não utilizar espaços, pois dificulta o acesso ao objeto posteriormente: precisaremos utilizar a crase em volta do nome do objeto para acessá-lo.
Existem diferentes estilos para nomear objetos2, como snake_case, onde todas as letras devem ser minúsculas, e as palavras separadas por underline. O importante é escolher um estilo e manter a consistência.
Existem diferentes tipos de dados que podemos armazenar em objetos no R, como números, textos, lógicos, fatores, datas, entre outros.
É muito importante identificar o tipo de dado que estamos trabalhando, pois cada tipo de dado permite usar funções específicas.
A função class()
permite verificar a classe de um objeto. Por exemplo, podemos verificar a classe do objeto pi
:
Os objetos numéricos no R podem ser de dois tipos:
inteiros (integer): armazena apenas números inteiros, ou seja, sem casas decimais. Ex: 1, 2, 3, 4, 5.
numéricos (numeric ou double): armazena números que podem conter casas decimais. Ex: 1, 2, 3.14, 4, 5.
Na maioria dos casos, utilizamos o tipo numeric para armazenar números, pois ele é mais flexível.
Por exemplo, para criar um objeto que armazena o número 42:
Para criar um objeto que armazena um valor usado para converter dólar em reais (R$), podemos usar o tipo numeric
:
O tipo lógico (logical) armazena valores booleanos: TRUE
(verdadeiro) ou FALSE
(falso). Os valores binários podem ser convertidos para números, onde TRUE
será 1, e FALSE
será 0.
Por exemplo, para criar objetos com os valores lógicos TRUE
e FALSE
:
O tipo texto (character, ou também conhecido como string) armazena textos. Para criar um objeto com um texto, precisamos colocar o texto entre aspas:
O tipo fator (factor) armazena variáveis categóricas, ou seja, variáveis que possuem um número limitado de categorias. Os valores possíveis de categoria são chamados de levels. Os fatores podem ser ordenados ou não ordenados.
Os fatores são muito úteis para a visualização de dados e para alguns modelos usados em análise de dados.
Neste momento, não vamos aprofundar no conceito de fatores: falaremos mais sobre eles nas próximas aulas.
O tipo data (Date) armazena datas no formato aaaa-mm-dd
(ano-mês-dia).
Para criar um objeto com uma data, podemos usar a função as.Date()
, que converte um texto para o tipo Date. Por exemplo, para criar um objeto com a data de início do curso:
A função Sys.Date()
retorna a data atual do sistema:
Podemos fazer operações com datas:
Existem várias funções que podemos usar para transformar variáveis de um tipo para outro. Essas funções tem começam com as.
seguido pelo tipo de dado que queremos que seja convertido. Por exemplo:
as.character()
: converte valores para textoas.numeric()
: converte valores para númeroas.logical()
: converte valores para lógicoas.factor()
: converte valores para fatoras.Date()
: converte valores para data[1] "2024"
[1] 1
[1] "2024-10-01"
[1] TRUE
Porém, nem toda conversão fará sentido. Por exemplo, podemos converter um número para texto, porém nem toda conversão de texto para número funcionará como esperado:
Quando a conversão não é possível, o R irá retornar um valor NA
(Not Available), que indica um valor faltante. Falaremos mais sobre valores faltantes na próxima seção.
NA
)Valores faltantes, conhecidos também como missing values, são valores que não estão disponíveis, ou que não foram informados. No R, esses valores são representados pelo valor NA
(Not Available).
Podemos testar se um valor é NA
usando a função is.na()
: essa função retornará TRUE
se o valor for NA
, e FALSE
caso contrário.
Algo importante é que o R não consegue fazer operações matemáticas com valores NA
. Por exemplo, se tentarmos realizar qualquer operação matemática com NA
, o resultado será NA
:
É importante identificar os valores NA em nossos dados, pois eles podem afetar o resultado de nossas análises. Por exemplo, se tentarmos calcular a média de um conjunto com valores NA
, o resultado será NA
:
Em aulas futuras falaremos sobre como identificar os NA
em nossos dados, e algumas estratégias para lidar com eles. Neste momento, podemos utilizar o argumento na.rm = TRUE
para que os NA
sejam removidos antes de executar a função que calcula a média:
Existem diferentes tipos de objetos no R, e cada tipo de objeto possui diferentes propriedades. Os principais tipos de objetos que utilizaremos ao longo do curso são: vetores, data.frames e listas.
Vetores armazenam um conjunto de valores de uma dimensão. Eles podem ser criados com a função c()
, que significa combine (combinar). Por exemplo, para criar um vetor com os números de 1 a 5:
Os vetores podem armazenar diferentes tipos de dados, como números, textos, fatores, entre outros. Porém cada vetor pode armazenar apenas um tipo de dado. Por exemplo, se tentarmos criar um vetor que armazena números e textos, o R irá converter todos os valores para texto. Essa propriedade é chamada de coerção.
[1] "character"
[1] "1" "2" "três" "4" "5"
No geral, podemos converter dados sem perder informação seguindo essa ordem: Lógico > Inteiro > Numérico > Texto.
Os data.frames são conjuntos de valores com duas dimensões: linhas e colunas. Porém, diferente do que vimos para as matrizes, os data.frames podem armazenar diferentes tipos de dados em cada coluna.
Esse é o principal tipo de objeto que utilizaremos nesse curso, pois ele é muito útil para armazenar dados tabulares.
Existem alguns data.frames já criados no R, como o airquality
, que armazena dados sobre a qualidade do ar na cidade de Nova York, em 1973. Essas são as primeiras linhas do data.frame airquality
:
Ozone Solar.R Wind Temp Month Day
1 41 190 7.4 67 5 1
2 36 118 8.0 72 5 2
3 12 149 12.6 74 5 3
4 18 313 11.5 62 5 4
5 NA NA 14.3 56 5 5
6 28 NA 14.9 66 5 6
Para criar um data.frame, podemos usar a função data.frame()
. Entretanto, o mais comum é importar dados de arquivos, como CSV, Excel, ou de bancos de dados. Falaremos sobre como importar dados na próxima aula.
As listas são os objetos mais flexíveis do R: podemos armazenar diferentes tipos de objetos dentro de uma mesma lista. Por exemplo, podemos armazenar um vetor, uma matriz, um data.frame, e até mesmo outra lista dentro de uma lista.
Podemos criar uma lista com a função list()
. Os elementos da lista podem ser nomeados ou não. Vamos criar uma lista nomeada, com três elementos: o número π, o data.frame airquality
, e o vetor letters
:
lista_exemplo <- list(numero_pi = pi,
df_qualidade_do_ar = airquality,
letras = letters)
class(lista_exemplo)
[1] "list"
A função str()
(structure) exibe a estrutura da lista, mostrando os elementos e seus tipos:
List of 3
$ numero_pi : num 3.14
$ df_qualidade_do_ar:'data.frame': 153 obs. of 6 variables:
..$ Ozone : int [1:153] 41 36 12 18 NA 28 23 19 8 NA ...
..$ Solar.R: int [1:153] 190 118 149 313 NA NA 299 99 19 194 ...
..$ Wind : num [1:153] 7.4 8 12.6 11.5 14.3 14.9 8.6 13.8 20.1 8.6 ...
..$ Temp : int [1:153] 67 72 74 62 56 66 65 59 61 69 ...
..$ Month : int [1:153] 5 5 5 5 5 5 5 5 5 5 ...
..$ Day : int [1:153] 1 2 3 4 5 6 7 8 9 10 ...
$ letras : chr [1:26] "a" "b" "c" "d" ...
Crie um objeto chamado meu_nome
e armazene seu nome nele. Depois, use a função toupper()
para converter seu nome para letras maiúsculas e salve o resultado em um novo objeto chamado nome_maiusculo
. Verifique se os dois objetos foram criados corretamente, consultando o painel Environment.
Observe os nomes a seguir, e identifique se estão adequados para nomear objetos e colunas no R. Para os nomes que não estão adequados, explique o motivo:
dados_altura
1_dados
media-altura
media_altura
Média altura
Tente adivinhar a classe dos objetos a seguir, e depois confira no R usando a função class()
: