Tipos de dados em R com exemplo
โก Resumo Inteligente
Os tipos de dados em R definem como os valores sรฃo armazenados na memรณria, e os operadores decidem o que o R pode fazer com eles. Vetores, variรกveis, operadores aritmรฉticos, relacionais, lรณgicos e de atribuiรงรฃo sรฃo abordados aqui com exemplos executรกveis.
Quais sรฃo os tipos de dados em R?
A seguir estรฃo os tipos de dados ou estruturas de dados na programaรงรฃo R:
- Escalares
- Vetores (numรฉricos, caracteres, lรณgicos)
- Matrizes
- Quadros de dados
- listas
Essa lista mistura duas ideias relacionadas, e separรก-las facilita a compreensรฃo do restante desta pรกgina. tipo de dados Descreve o que รฉ um valor รบnico โ um nรบmero, um texto, um VERDADEIRO ou um FALSO. estrutura de dados descreve quantos valores sรฃo mantidos juntos e em que formato. Escalares, vetores, matrizes, data frames e listas sรฃo estruturas; os valores dentro delas ainda pertencem a um dos tipos bรกsicos do R.
| Estrutura | Dimensรตes | Tipos mistos sรฃo permitidos? | Uso tรญpico |
|---|---|---|---|
| Escalar | Vetor de comprimento 1 | Nรฃo | Uma รบnica mediรงรฃo ou bandeira |
| vetor | 1 | Nรฃo | Uma coluna de leituras de um tipo |
| Matriz | 2 | Nรฃo | Grades numรฉricas e รกlgebra linear |
| Quadro de dados | 2 | Sim, um tipo por coluna. | Conjuntos de dados tabulares |
| Lista | 1, mas aninhรกvel | Sim, qualquer coisa por elemento | Resultados do modelo e contรชineres mistos |
Em R, nรฃo existe um tipo escalar separado: um escalar รฉ simplesmente um vetor de comprimento um, razรฃo pela qual grande parte do cรณdigo em R รฉ escrita para vetores inteiros de uma sรณ vez.
Tipos de dados bรกsicos em R
Em R, cada valor pertence a um pequeno conjunto de tipos bรกsicos (atรดmicos):
- 4.5 รฉ um valor decimal chamado numรฉrico.
- O nรบmero 4 parece um nรบmero inteiro, mas o R ainda o armazena como um nรบmero de ponto flutuante de dupla precisรฃo (double). Escreva 4L quando for necessรกrio um nรบmero inteiro verdadeiro.
- VERDADEIRO ou FALSO รฉ um valor booleano, chamado de valor lรณgico em R.
- O valor entre aspas simples (โ โ) ou aspas duplas (' ') รฉ um texto (uma cadeia de caracteres). Esses valores sรฃo chamados de caracteres.
Dois outros tipos completam o conjunto. Valores complexos, como 3+2i, contรชm uma parte real e uma parte imaginรกria, e valores brutos contรชm bytes. Ambos aparecem raramente em anรกlises do dia a dia, mas estรฃo listados no R bรกsico. documentaรงรฃo typeof() juntamente com os quatro tipos comuns.
| Formato | Valor de exemplo | class() retorna | typeof() retorna |
|---|---|---|---|
| lรณgico | VERDADEIRO | lรณgico | lรณgico |
| Nรบmero inteiro | 4L | nรบmero inteiro | nรบmero inteiro |
| Double (numรฉrico) | 4.5 | numรฉrico | duplo |
| Personagem | "R รฉ Fantรกstico" | personagem | personagem |
| Complexo | 3 + 2i | integraรงรตes | integraรงรตes |
| Cru | como.bruto(10) | cru | cru |
Podemos verificar o tipo de uma variรกvel com a funรงรฃo de classe.
Exemplo 1: Verificar uma variรกvel numรฉrica
# Declare variables of different types # Numeric x <- 28 class(x)
Saรญda:
## [1] "numeric"
Exemplo 2: Verificar uma variรกvel de caractere
# String y <- "R is Fantastic" class(y)
Saรญda:
## [1] "character"
Exemplo 3: Verificar uma variรกvel lรณgica
# Boolean z <- TRUE class(z)
Saรญda:
## [1] "logical"
Note que a funรงรฃo `class()` retorna "numรฉrico" para 28, mesmo que 28 nรฃo tenha parte decimal. O R o armazenou como um nรบmero de ponto flutuante de dupla precisรฃo (`double`), e somente a funรงรฃo `typeof()` revela isso. A prรณxima diferenรงa que vale a pena aprender รฉ como esses valores recebem nomes.
Variรกveis โโem R
As variรกveis โโsรฃo um dos blocos de construรงรฃo bรกsicos em R, responsรกveis โโpelo armazenamento de valores, e sรฃo essenciais para qualquer pessoa que trabalhe com ciรชncia de dados. Uma variรกvel em R pode armazenar um nรบmero, um objeto, um resultado estatรญstico, um vetor, um conjunto de dados ou uma previsรฃo de modelo โ basicamente qualquer coisa que o R produza. Podemos usar essa variรกvel posteriormente simplesmente chamando seu nome.
Para declarar uma variรกvel em R, precisamos atribuir um nome a ela. O nome nรฃo deve conter espaรงos. Podemos usar o caractere _ para unir duas palavras.
Os nomes podem conter letras, dรญgitos, pontos e sublinhados, mas devem comeรงar com uma letra ou um ponto, e palavras reservadas como TRUE, FALSE e NULL nรฃo podem ser usadas como nomes. Para adicionar um valor ร variรกvel, use <- ou =.
Aqui estรก a sintaxe:
# First way to declare a variable: use the `<-` name_of_variable <- value # Second way to declare a variable: use the `=` name_of_variable = value
Na linha de comando, podemos escrever os seguintes cรณdigos para ver o que acontece:
Exemplo 1: Atribua um valor e imprima-o.
# Print variable x
x <- 42
x
Saรญda:
## [1] 42
Exemplo 2: Declarar uma segunda variรกvel
y <- 10 y
Saรญda:
## [1] 10
Exemplo 3: Usar duas variรกveis โโem uma รบnica expressรฃo
# We call x and y and apply a subtraction
x-y
Saรญda:
## [1] 32
Uma variรกvel que armazena vรกrios valores do mesmo tipo รฉ um vetor, que รฉ a estrutura esperada por quase todas as funรงรตes em R.
Vetores em R
Um vetor รฉ uma coleรงรฃo unidimensional na qual todos os elementos compartilham o mesmo tipo. Podemos criar um vetor com todos os tipos de dados bรกsicos do R aprendidos anteriormente. A maneira mais simples de construir um vetor em R รฉ usar a funรงรฃo `c()`.
Exemplo 1: Criar um vetor numรฉrico
# Numerical
vec_num <- c(1, 10, 49)
vec_num
Saรญda:
## [1] 1 10 49
Exemplo 2: Criar um vetor de caractere
# Character vec_chr <- c("a", "b", "c") vec_chr
Saรญda:
## [1] "a" "b" "c"
Exemplo 3: Criar um vetor lรณgico
# Boolean vec_bool <- c(TRUE, FALSE, TRUE) vec_bool
Saรญda:
##[1] TRUE FALSE TRUE
Se c() receber uma mistura de tipos, ela nรฃo falha. Ela silenciosamente converte cada elemento para o tipo mais geral presente, entรฃo c(1, "a", TRUE) se torna um vetor de caracteres. Tambรฉm podemos fazer cรกlculos aritmรฉticos com vetores em R.
Exemplo 4: Adicionar dois vetores elemento por elemento
# Create the vectors vect_1 <- c(1, 3, 5) vect_2 <- c(2, 4, 6) # Take the sum of A_vector and B_vector sum_vect <- vect_1 + vect_2 # Print out total_vector sum_vect
Saรญda:
[1] 3 7 11
A adiรงรฃo funcionou elemento por elemento porque ambos os vetores tรชm o mesmo comprimento. Quando os comprimentos diferem, o R recicla o vetor mais curto, repetindo-o atรฉ que ele corresponda ao mais longo, e emite um aviso apenas quando o comprimento do vetor mais longo nรฃo for um mรบltiplo do mais curto.
Exemplo 5: Fatie os cinco primeiros elementos
Em R, รฉ possรญvel fatiar um vetor. Em algumas ocasiรตes, estamos interessados โโapenas nos cinco primeiros elementos de um vetor. Podemos usar o comando [1:5] para extrair esses elementos.tract os valores de 1 a 5.
# Slice the first five rows of the vector
slice_vector <- c(1,2,3,4,5,6,7,8,9,10)
slice_vector[1:5]
Saรญda:
## [1] 1 2 3 4 5
Exemplo 6: Criar um intervalo com os dois pontos Operator
A maneira mais curta de criar um intervalo de valores รฉ usar o operador de dois pontos (:) entre dois nรบmeros. Por exemplo, no exemplo acima, podemos escrever c(1:10) para criar um vetor de valores de um a dez.
# Faster way to create adjacent values
c(1:10)
Saรญda:
## [1] 1 2 3 4 5 6 7 8 9 10
Como um vetor muda de tipo silenciosamente quando รฉ misturado, รฉ importante saber como inspecionar e converter tipos sob demanda.
Como verificar e converter tipos de dados em R
Trรชs famรญlias de funรงรตes respondem ร s trรชs perguntas que surgem constantemente: o que รฉ isto, isto รฉ de um determinado tipo e isto pode se tornar de outro tipo?
| Famรญlia de funรงรตes | Pergunta que responde | Exemplos |
|---|---|---|
| classe(), tipo(), modo() | Que tipo รฉ esse valor? | classe(28), tipo(28), modo(28) |
| รฉ.*() | Este valor รฉ do tipo X? | รฉ.numรฉrico(), รฉ.caractere(), รฉ.lรณgico() |
| como.*() | Esse valor pode se tornar do tipo X? | como.numรฉrico(), como.caractere(), como.inteiro() |
| str () | Qual รฉ a aparรชncia geral deste objeto? | str(vec_num) |
# Three different views of the same value x <- 28 class(x) # "numeric" -- the class used for method dispatch typeof(x) # "double" -- how R stores the value internally mode(x) # "numeric" -- the older S-style mode # Ask a yes/no question about a type is.numeric(x) # TRUE is.character(x) # FALSE # Convert between types as.character(x) # "28" as.integer("28") # 28 stored as an integer as.numeric("abc") # NA, with a coercion warning
Duas regras explicam a maioria das surpresas aqui. Primeiro, `class()` reporta a classe usada para o despacho de mรฉtodos, enquanto `typeof()` reporta o armazenamento interno, razรฃo pela qual 28 รฉ "numรฉrico" para um e "double" para o outro. Segundo, uma conversรฃo que nรฃo pode ser bem-sucedida nรฃo interrompe o script: `as.numeric("abc")` retorna NA e imprime um aviso de coerรงรฃo, portanto, valores NA silenciosos apรณs uma importaรงรฃo sรฃo quase sempre um problema de tipo. A mesma lรณgica conduz a... fatores, que armazenam categorias como cรณdigos inteiros mais uma tabela de nรญveis.
Com os tipos definidos, o prรณximo passo sรฃo os operadores que atuam sobre eles.
R Aritmรฉtica Operatoros
Primeiramente, veremos os operadores aritmรฉticos bรกsicos em R. A seguir, apresentamos os operadores aritmรฉticos na linguagem de programaรงรฃo R e seus respectivos significados:
| Operator | Descriรงรฃo |
|---|---|
| + | Adiรงรฃo |
| - | Subtracรงรฃo |
| * | Multiplicaรงรฃo |
| / | Divisรฃo |
| ^ ou ** | Exponenciaรงรฃo |
| %% | Mรณdulo (resto da divisรฃo) |
| %/% | Divisรฃo inteira (quociente, resto descartado) |
Cada um desses operadores รฉ vetorizado, portanto a mesma expressรฃo funciona em um รบnico valor ou em uma coluna inteira.
Exemplo 1: Adiรงรฃo
# An addition
3 + 4
Saรญda:
## [1] 7
Vocรช pode facilmente copiar e colar o cรณdigo R acima no RStudio Console. Neste artigo, a saรญda รฉ exibida nas linhas que comeรงam com ##. Por exemplo, se escrevermos o cรณdigo print("Guru99") o console imprime [1] "Guru99", que esta pรกgina mostraria como ## [1] "Guru99 ".
O ## marca uma linha de saรญda impressa e o nรบmero entre colchetes ([1]) รฉ o รญndice do primeiro valor nessa linha, nรฃo fazendo parte do resultado.
Frases que comeรงam com # sรฃo comentรกrios. Podemos usar # dentro de um script R para adicionar qualquer nota que quisermos, e o R a ignora em tempo de execuรงรฃo.
Exemplo 2: Multiplicaรงรฃo
# A multiplication
3*5
Saรญda:
## [1] 15
Exemplo 3: Divisรฃo
# A division
(5+5)/2
Saรญda:
## [1] 5
Exemplo 4: Exponenciaรงรฃo
# Exponentiation
2^5
Saรญda:
## [1] 32
Exemplo 5: Mรณdulo
# Modulo
28%%6
Saรญda:
## [1] 4
A aritmรฉtica produz nรบmeros. O prรณximo grupo de operadores produz VERDADEIRO e FALSO.
R Relacional (Comparaรงรฃo) Operatoros
Os operadores relacionais comparam dois valores e retornam um resultado lรณgico. Sรฃo eles que estabelecem as condiรงรตes utilizadas para a filtragem e sรฃo vetorizados exatamente da mesma forma que os operadores aritmรฉticos.
| Operator | Descriรงรฃo |
|---|---|
| > | Melhor que |
| < | Less do que |
| >= | Melhor que ou igual a |
| <= | Less que ou igual a |
| == | Exatamente igual a |
| != | Diferente de |
a <- 10 b <- 3 a > b # TRUE a < b # FALSE a >= 10 # TRUE a <= 3 # FALSE a == b # FALSE a != b # TRUE # Relational operators are vectorised scores <- c(45, 78, 90, 62) scores >= 60 # FALSE TRUE TRUE TRUE
Dois hรกbitos economizam tempo aqui. Use == para comparaรงรฃo e <- para atribuiรงรฃo, porque um รบnico = dentro de uma condiรงรฃo รฉ um erro comum de iniciantes. E evite == em nรบmeros de ponto flutuante de dupla precisรฃo: o arredondamento de ponto flutuante significa que 0.1 + 0.2 == 0.3 รฉ FALSO, entรฃo isTRUE(all.equal(0.1 + 0.2, 0.3)) รฉ o teste seguro. Comparaรงรตes em quadros de dados ordenados seguem as mesmas regras.
R Lรณgico Operatoros
Com os operadores lรณgicos, queremos retornar valores dentro do vetor com base em condiรงรตes lรณgicas. A tabela abaixo lista os operadores lรณgicos disponรญveis em R.
Em R, as declaraรงรตes lรณgicas sรฃo delimitadas por colchetes []. Podemos adicionar quantas declaraรงรตes condicionais quisermos, mas precisamos incluรญ-las entre parรชnteses. Podemos seguir esta estrutura para criar uma declaraรงรฃo condicional:
variable_name[(conditional_statement)]
Com `variable_name` referindo-se ร variรกvel que queremos usar na instruรงรฃo, criamos a declaraรงรฃo lรณgica, por exemplo, `variable_name > 0`. Finalmente, usamos colchetes para finalizar a declaraรงรฃo lรณgica. Abaixo estรก um exemplo de uma declaraรงรฃo lรณgica.
Exemplo 1: Compare cada elemento de um vetor
# Create a vector from 1 to 10
logical_vector <- c(1:10)
logical_vector>5
Saรญda:
## [1]FALSE FALSE FALSE FALSE FALSE TRUE TRUE TRUE TRUE TRUE
Na saรญda acima, o R lรช cada valor e o compara com a condiรงรฃo `logical_vector>5`. Se o valor for estritamente maior que cinco, a condiรงรฃo รฉ VERDADEIRA; caso contrรกrio, รฉ FALSA. O R retorna um vetor com os valores VERDADEIRO e FALSO.
Exemplo 2: Mantenha apenas os elementos que correspondem
No exemplo abaixo, queremos extracPara selecionar os valores que atendem ร condiรงรฃo "รฉ estritamente maior que cinco", podemos envolver a condiรงรฃo entre colchetes, precedida pelo vetor que contรฉm os valores.
# Print value strictly above 5
logical_vector[(logical_vector>5)]
Saรญda:
## [1] 6 7 8 9 10
Exemplo 3: Combinar duas condiรงรตes
# Print 5 and 6
logical_vector <- c(1:10)
logical_vector[(logical_vector>4) & (logical_vector<7)]
Saรญda:
## [1] 5 6
O exemplo 3 usa o caractere รบnico & propositalmente. Os operadores de um รบnico caractere & e | comparam vetores elemento por elemento e retornam um vetor, que รฉ o que a criaรงรฃo de subconjuntos exige. As formas duplas && e || retornam um รบnico valor e pertencem ร s condiรงรตes if() e while(). R 4.3.0Passar um argumento com mais de um elemento para && ou || resulta em um erro, e nรฃo em um aviso; portanto, as duas famรญlias de operadores nรฃo sรฃo mais intercambiรกveis. O operador ! nega uma condiรงรฃo, e xor() realiza o OU exclusivo.
Tarefa em R Operatoros
Os operadores de atribuiรงรฃo vinculam um valor a um nome. O R oferece mais operadores de atribuiรงรฃo do que a maioria das linguagens, e as diferenรงas sรฃo importantes quando o cรณdigo entra em desenvolvimento. funรงรตes.
| Operator | Descriรงรฃo |
|---|---|
| <- | Atribuiรงรฃo ร esquerda, a escolha idiomรกtica em R |
| = | Atribuiรงรฃo ร esquerda, mas normalmente reservada para argumentos de funรงรฃo. |
| -> | Atribuiรงรฃo correta, vรกlida, mas raramente usada. |
| << - | Superatribuiรงรฃo que pesquisa ambientes envolventes |
| - >> | Superatribuiรงรฃo correta |
# Left assignment -- the idiomatic form count <- 5 # Equals sign: works, but reserve it for function arguments count = 5 round(3.14159, digits = 2) # Right assignment 5 -> count # Superassignment, used inside functions to reach an outer scope count <<- 5
Os guias de estilo recomendam o uso de `<` para criar objetos e `=` para nomear argumentos dentro de uma chamada, pois assim as duas funรงรตes permanecem visualmente distintas. Use `<<` com moderaรงรฃo: ele modifica um objeto fora da funรงรฃo atual e dificulta a compreensรฃo do cรณdigo. Depois de dominar a atribuiรงรฃo e os tipos, os prรณximos passos sรฃo: importando dados reais e reshaping com dplyr; O Visรฃo geral da linguagem R Coloca toda a cadeia de ferramentas em contexto.

