Neste tutorial, mostramos o que são objetos no R e como manuseá-los.
Objetos são valores nomeados. Quando falamos de valores no R, estamos nos referindo a algo que ocupa espaço na memória ram do cumputador. Pode ser um número, um texto ou um conjunto de números ou de textos.
Esses valores podem ser submetidos a operações matemáticas, no caso de números, ou transformados para gerar outros valores. Por exemplo, “Maria” pode se transformar em “MARIA”.
Para criar objetos no R, você deve atribuir um valor a um nome. Exemplos:
numero <- 2
nome <- "Maria"
numero
[1] 2
nome
[1] "Maria"
Perceba que usamos o operador <-
para atribuir o
valor a um nome. No R, você sempre usa esse operador para atribuir. Há
um outro operador, o =
, que também pode ser usado, mas este
possui usos mais específicos e falaremos dele no momento oportuno.
Dar nomes a objetos é como dar nome a filhos, alguns são proibidos, outros podem causar muitos problemas no futuro. Se você quiser chamar seu filho de “Esfiha”, o cartório irá recusar o registro. Se você usar certos nomes, o R retornará um erro. Veja os exemplos abaixo, nomes têm de começar com letra e não podem ter operadores.
3 <- 2
<- 4
4m <- 'Mário'
_x -te-vi <- "pássaro" ## O hífen é um operador matemático. bem
Em todos os casos acima, o R recusará a criação do objeto. Assim mesmo, caso queira insistir na nomeação não convencional, o R aceitará se você usar o acento grave como demarcador:
`3` <- 2
`3`
[1] 2
Se você fizer isso, as chances de encontrar problemas no futuro são altas.
É aconselhável usar nomes sugestivos dos valores contidos neles, em
letra minúscula e separados por _
.
idade <- c(25,29,40,57)
endereco_residencial <- "Rua José Mario Pereira, 43"
Quando concatenamos um conjunto de valores da mesma natureza, chamamos esse objeto de vetor atômico. Exemplos:
numeros <- c(2,5,9,20)
numeros
[1] 2 5 9 20
nomes <- c("Maria", "Flávia","Roberto", "Pedro")
nomes
[1] "Maria" "Flávia" "Roberto" "Pedro"
Observe que para criar esses objetos, colocamos eles dentro da letra c com parênteses, que significa concatenar valores.
Os vetores atômicos são assim chamados porque só podem conter um tipo de valor. Se você tentar concatenar texto com número, este último será convertido em texto e você perderá a capacidade de realizar operações matemáticas com ele.
x <- c("Mário", 3)
x
[1] "Mário" "3"
Os objetos podem ter tipos e classes. Os tipos correspondem à natureza mesma do objeto, as classes dizem respeito ao comportamento.
Você define um inteiro no R, colocando um L depois do número:
inteiro <- 4L
typeof(inteiro)
[1] "integer"
Note que usamos a função typeof()
para saber qual a
natureza do objeto.
Double ou precisão dupla são formatos numéricos que ocupam 64 bits da memória do computador, em contraste precisão singular, que ocupam 32. São usados para referir a números com casas decimais, tanto racionais quanto irracionais.
Character é o formato texto, ou string, em outras linguagens. Você usa ele para criar valores que não serão usados para operações matématicas. Para criar character, você precisa usar aspas simples ou duplas.
nome <- "Flaviana"
cpf <- "123.456.768-10"
Se você colocar aspas nos números, eles serão tratados como characteres. Se você tentar realizar operações, o R retornará um erro.
n1 <- "2"
n2 <- "3"
n1 + n2
Error in n1 + n2: argumento não-numérico para operador binário
Em programação, além dos tipos, existe uma outro conceito chamado classe, o qual diz respeito ao comportamento dos objetos. Os tipos básicos que vimos acima, podem ser representados em diferentes classes. Duas delas são especialmente importantes: datas e fatores
Datas são do tipo numérico (double), mas visualizadas no seguinte formato: “aaaa-mm-dd”, ou seja, mês, dia, ano. Esse formato segue o padrão internacional ISO-8601. O ano vem sempre com quatro dígitos e a ordem segue do maior para o menor.
Para criar datas, precisamos de uma função do R chamas
as.Date()
.
d1 <- as.Date("2022-02-15")
d1
[1] "2022-02-15"
Veja que ela foi impressa entre aspas, mas na verdade ela é um double:
typeof(d1)
[1] "double"
Isso ocorre porque, dessa forma, você pode realizar operações matemáticas com datas:
Como a data é um número, é possível convertê-la para o formato
double, usando a função as.numeric()
:
as.numeric(d1)
[1] 19038
Esse número, 19038, é o número de dias desde 01 de janeiro de 1970. Datas anteriores a esta data são representadas negativamente:
n3 <- as.Date("1950-04-03")
as.numeric(n3)
[1] -7213
Suponha que você realize uma pesquisa entre seus colegas de trabalho com perguntas como: Qual o seu primeiro nome e qual a sua religião e obtenha as seguintes respostas:
primeiro_nome <- c("Fábio","Maria","Maria","José", "Catarina","José")
primeiro_nome
[1] "Fábio" "Maria" "Maria" "José" "Catarina" "José"
religiao <- c("cristão","espírita","budista", "cristão","espírita", "cristão")
religiao
[1] "cristão" "espírita" "budista" "cristão" "espírita" "cristão"
Parece natural que alguns nomes e algumas religões vão se repetir nas respostas. Quando isso acontece, é preferível pedir ao R para armazenar essas respostas como números e associar etiquetas a esses números, correspondentes às respostas. Esse tipo de dados é chamado de categórico porque os possíveis valores que ele assume são conhecidos e limitados.
Existe uma função no R própria para tratar de dados categóricos.
primeiro_nome <- factor(primeiro_nome)
primeiro_nome
[1] Fábio Maria Maria José Catarina José
Levels: Catarina Fábio José Maria
religiao <- factor(religiao)
religiao
[1] cristão espírita budista cristão espírita cristão
Levels: budista cristão espírita
Ao chamar o função factor()
, o R associa cada categoria
a um número e etiqueta cada uma delas com os nomes originais. Essas
etiquetas são atributos chamados níveis (levels). Note que os
levels
estão em ordem alfabética e são únicos.
Religião agora é do tipo numérico, mas de classe fator. Sua natureza é numérica, mas seu comportamento é de categoria. Você visualiza como se fosse texto, mas, na verdade, é um número.
Se você converter o fator para inteiro, ele retorna os números correspondentes.
as.integer(religiao)
[1] 2 3 1 2 3 2
Há duas vantagens em usar fatores. A primeira é que os dados serão armazenados como inteiros, o que reduz o uso da memória. A segunda é que análises estatísticas realizam operações com matrizes numéricas.
Matrizes são vetores atômicos com duas dimensões. Vamos criar um vetor de quinze números sequenciais. No R, você faz isso usando : (dois pontos) entre o primeiro e o último:
x <- 1:15
x
[1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
Agora vamos converter para uma matriz de duas três colunas e cinco linhas:
matrix(x, nrow = 5) # É suficiente informar o número de linhas
[,1] [,2] [,3]
[1,] 1 6 11
[2,] 2 7 12
[3,] 3 8 13
[4,] 4 9 14
[5,] 5 10 15
Você pode criar uma matriz de textos também. Vamos criar um vetor com as dezesseis primeiras letras do alfabeto. O R já tem um objeto chamado letters, vamos simplesmente obter um subconjunto delas. Para tanto, usamos colchetes.
x <- letters[1:16]
x
[1] "a" "b" "c" "d" "e" "f" "g" "h" "i" "j" "k" "l" "m" "n" "o" "p"
matrix(x, ncol = 4)
[,1] [,2] [,3] [,4]
[1,] "a" "e" "i" "m"
[2,] "b" "f" "j" "n"
[3,] "c" "g" "k" "o"
[4,] "d" "h" "l" "p"
Uma característica das matrizes é que elas são atômicas, i.e, todos os elementos têm de ser do mesmo tipo.
Semelhante às planilhas do excel ou as tabelas de SQL, o R possui dataframes, que são nada menos que um emparelhamento de vetores do mesmo tamanho.
Para criar dataframes, você usa a função data.frame()
.
Vamos criar um dataframe com os nomes e respectivas religiões acima
criados.
df <- data.frame(primeir_nome = primeiro_nome,
religiao = religiao)
df
primeir_nome religiao
1 Fábio cristão
2 Maria espírita
3 Maria budista
4 José cristão
5 Catarina espírita
6 José cristão
Há uma classe especial de dataframe chamada tibble, que é praticamente idêntica a dataframe, mas um pouco mais segura para operar.
Por fim, o R possui um tipo de objeto chamado list
.
Listas podem conter todos os demais tipois de objetos. Elas geralmente
são usados para conter objetos de diferentes tipos e tamanhos. Podemos
criar uma lista com alguns dos objetos já criados.
lista <- list(religiao, x, df)
lista
[[1]]
[1] cristão espírita budista cristão espírita cristão
Levels: budista cristão espírita
[[2]]
[1] "a" "b" "c" "d" "e" "f" "g" "h" "i" "j" "k" "l" "m" "n" "o" "p"
[[3]]
primeir_nome religiao
1 Fábio cristão
2 Maria espírita
3 Maria budista
4 José cristão
5 Catarina espírita
6 José cristão
Os dataframes são, a rigor, listas também, em que cada coluna constitui um elemento. Eles são listas com a classe dataframe. Isso significa que o comportamento dos dataframes será diferente das demais listas. Vamos perguntar ao R qual o tipo e qual a classe do objeto df acima criado.
typeof(df)
[1] "list"
class(df)
[1] "data.frame"
Diferentemente de outras linguagens, como Python, que começam a contar do zero, o R começa a contar os elementos de um vetor ou de uma lista, a partir do 1 (um) até o tamanho do vetor.
Para extrair um elemento de um vetor ou de uma lista, use colchetes com o índice. Por exemplo, se quiser obter a segunda letra do alfabeto:
letters[2]
[1] "b"
Para obter da segunda até a quarta letra:
letters[2:4]
[1] "b" "c" "d"
Se você quiser excluir uma delas, use o sinal de menos na frente do número:
letters[-1]
[1] "b" "c" "d" "e" "f" "g" "h" "i" "j" "k" "l" "m" "n" "o" "p" "q"
[17] "r" "s" "t" "u" "v" "w" "x" "y" "z"
Por outro lado, se você quiser obter valores contando do final, use a
função length()
dentro dos colchetes:
letters[length(letters)]
[1] "z"
Há também uma função chamada tail()
, que é mais lenta,
mas é mais flexível:
tail(letters,1)
[1] "z"
Se quiser obter os três últimos valores:
tail(letters,3)
[1] "x" "y" "z"
Essas mesmas regras valem para listas em geral. Para dataframes, há
um pacote chamado dplyr()
, o qual possui funções próprias
para isso.
For attribution, please cite this work as
Filho (2022, Oct. 15). Jurimetria: Objetos no R. Retrieved from https://direitoemdados.consudata.com.br/posts/2022-10-15-objetos/
BibTeX citation
@misc{filho2022objetos, author = {Filho, José de Jesus}, title = {Jurimetria: Objetos no R}, url = {https://direitoemdados.consudata.com.br/posts/2022-10-15-objetos/}, year = {2022} }