top of page

Tipos de dados

Objetos

Visualizando o conteúdo de objetos

Introdução

contributors()

 

A função contributors() exibe os nomes das principais pessoas que contribuíram para o desenvolvimento do programa R.

citation()

 

A função citation() exibe uma sugestão de como  citar o programa R em publicações técnicas e acadêmicas.

​RShowDoc("COPYING")

 

RShowDoc("COPYING") exibe a licença pública do programa R.

history()

A função history() exibe uma lista das funções executadas pelo usuário.

builtins()

Além das funções existentes no R, você pode criar suas próprias funções, como veremos posteriormente. As funções que já existem no R são chamadas de "built-in functions" (ou "funções embutidas"). A função builtins() exibe uma lista das funções "built-in" do R.

sessionInfo()

sessionInfo() exibe informações sobre o programa R e o sistema operacional.

Tipos de dados

Escalares

x <- 34

y = 7

9 -> z

X <- 45

h <- pi

z <- 8+4

A expressão x <- 34 denota "atribua a x o valor 34". Notar, nos exemplos acima, que há diferentes formas  de atribuir um valor a um escalar, usando <--> ou =.

Notar que o R diferencia letras minúsculas de letras maiúsculas. Assim, os objetos x e X são diferentes.

A expressão a seguir atribui 8 a a, b e c.

a <- b <- c <- 8

Vetores

Os vetores podem ser numéricos, caracteres ou lógicos (tipo "verdadeiro" ou "falso").

# numéricos

x1 <- c(6,3,6,0,7,3)

x2 <- 1:20

x3 <- 20:1

x4 <- c(x2,x4)

 

# caracteres

y1 <- c("norte", "sul","leste","oeste")

y2 <- month.abb

y3 <- month.name

 

y2
 [1] "Jan" "Feb" "Mar" "Apr" "May" "Jun" "Jul" "Aug" "Sep" "Oct" "Nov" "Dec"

 

y3
 [1] "January"   "February"  "March"     "April"     "May"       "June"      "July"      "August"   
[9] "September" "October"   "November"  "December"

# lógicos

z <- c(TRUE,TRUE,FALSE)

# O símbolo "#" serve para inserir comentários quando você escreve linhas de programação

 

# is.vector(x) retorna TRUE se x é um vetor e FALSE caso contrário

is.vector(x1)

Matrizes

# exemplos

# nrow indica quantas linhas terá a matriz

M1 <- matrix(c(1, 1, 1, 2), nrow = 2)

 

# ncol indica quantas colunas terá a matriz

 

M2 <- matrix(c(1, 3, 2, 4), ncol = 2)

# perceba que a matriz é "preenchida" sequencialmente pelas colunas

# byrow é usado para preencher a matriz pelas linhas

M3 <- matrix(c(1, 3, 2, 4), ncol = 2, byrow=T)

A sintaxe é:

mymatrix <- matrix(vector, nrow=r, ncol=c, byrow=FALSE, dimnames = list(char_vector_rownames, char_vector_colnames))

 

M <- matrix(c(1, 3, 2, 4), ncol = 2, byrow=T, dimnames=list(c("L1","L2"),c("C1","C2")))

​dim(M)           # retorna a dimensão da matriz M (linhas e colunas)

M[1,1]           # retorna o elemento da linha 1 e coluna 1 da matriz M

M[1,]            # retorna a linha 1 da matriz M

M[,1]            # retorna a coluna 1 da matriz M

nrow(M)          # retorna o número de linhas da matriz M

ncol(M)          # retorna o número de colunas da matriz M

t(M)             # retorna a transposta da matriz M

solve(M)         # retorna a inversa da matriz M

det(M)           # retorna o determinante da matriz M

diag(M)          # retorna os elementos da diagonal da matriz M

eigen(M)         # retorna os autovalores e autovetores da matriz M

is.matrix(M)     # retorna TRUE se M é uma matriz e FALSE caso contrário

Fatores

Fatores representam variáveis categóricas.

 

x <- c(7,5,2,8,5,7,1,7)

 

# as funções factor(x) ou as.factor(x) convertem x em fatores.

 

factor(x)

 

[1] 7 5 2 8 5 7 1 7

Levels: 1 2 5 7 8

 

as.factor(x)

 

# is.factor() retorna TRUE se x é um fator e FALSE caso contrário

 

is.factor(x)

# a função levels() retorna os níveis de um fator

xf <- factor(x)


levels(xf)
 

[1] "1" "2" "5" "7" "8"
 

Arrays

Generalizam o conceito de matrizes, permitindo um número maior de dimensões

 

a <- array(1:24,  dim=c(3,4,2))

Data frame

Um data frame é um “banco de dados”: é uma tabela composta por um ou vários vetores e/ou fatores do mesmo tamanho.

 

nome <- c("Alexander","André","Breno","Carla")

nota <- c(8.6,9.4,6.2,7.5)

resultado <- c(TRUE,TRUE,TRUE,FALSE)

meusdados <- data.frame(nome,nota,resultado)

names(meusdados) <- c("nome","nota","resultado")

Datas

t0 <- as.Date("11/02/2003",format="%d/%m/%Y")
[1] "2003-02-11"

t1 <- as.Date("11/02/2023",format="%d/%m/%Y")
[1] "2023-02-11"

 

t1-t0
Time difference of 7305 days

tempodias <- as.numeric(t1-t0)

tempodias

[1] 7305

as.Date("5jan2018", "%d%b%Y")
[1] "2018-01-05"
 

as.Date("5jan2018",format="%d%b%Y")
[1] "2018-01-05"
 

as.Date("5-jun-2013",format="%d-%b-%Y")
[1] "2013-06-05"
 

Valores faltantes (missings)

Os valores faltantes são indicados por NA (not available)

y <- c(4,9,5,NA,3)

is.na(y)            # indica quais elementos em y são faltantes

!is.na(y)           # indica quais elementos em y não são faltantes

anyNA(y)            # retorna TRUE se há algum valor faltante em y

y[is.na(y)] <- 99   # substitui todos os valores faltantes em y por 99

 

Observar que is.na()também retorna TRUE para NaN (“Not a Number”)

is.na(c(4,1,6,NA,NaN))
[1] FALSE FALSE FALSE  TRUE  TRUE

Removendo valores faltantes de um vetor

y <- c(4,9,5,NA,3)
y <- y[!is.na(y)]
y
[1] 4 9 5 3

Removendo valores faltantes de um data frame

x1 <- c(3,7,4,NA,9,2,6)
x2 <- c(NA,3,5,6,9,8,NA)
x3 <- c(9,7,2,5,8,3,4)
dat <- data.frame(x1,x2,x3)
dat
  x1 x2 x3
1  3 NA  9
2  7  3  7
3  4  5  2
4 NA  6  5
5  9  9  8
6  2  8  3
7  6 NA  4

is.na(dat)
        x1    x2    x3
[1,] FALSE  TRUE FALSE
[2,] FALSE FALSE FALSE
[3,] FALSE FALSE FALSE
[4,]  TRUE FALSE FALSE
[5,] FALSE FALSE FALSE
[6,] FALSE FALSE FALSE
[7,] FALSE  TRUE FALSE

 

complete.cases(dat)
[1] FALSE  TRUE  TRUE FALSE  TRUE  TRUE FALSE


newdat <- na.omit(dat)
newdat
  x1 x2 x3
2  7  3  7
3  4  5  2
5  9  9  8
6  2  8  3

Listagem e remoção de objetos

ls()                # lista os objetos ativos

remove() ou rm()    # remove objetos

rm(list=ls())       # remove todos os objetos ativos

ls.str()            # detalhes dos objetos ativos

exists()            # verifica a existência de um objeto na seção atual

a <- c(56,78,98)

 

exists("a")

[1] TRUE

Notação científica

Útil quando se deseja expressar números muito grandes ou muito pequenos. Por exemplo,

  • 2e3 denota 2 x 103 = 2000

  • 1.85e8 denota 1,85 x 108 = 185000000

  • 2e15 denota 2 x 1015 = 2000000000000000

  • 2e-10 denota 2 x 10-10 = 0,0000000002

 

 

Operadores

  Aritméticos

 

  +   Adição

  -   Subtração

  *   Multiplicação

  /   Divisão

  ^   Potência

  **  Potência

  %%  "Resto" da divisão

  %/% Divisão inteira

  Comparações

 

  <    Menor que

  >    Maior que

  <=   Menor ou igual

  >=   Maior ou igual

  ==   Igual

  !=   Diferente

  Lógicos

 

  !     NOT

  x&y   AND (vetorizado)

  x&&y  AND (não vetorizado)

  x|y   OR  (vetorizado)

  x||y  OR  (não vetorizado)

Para entendermos a diferença entre & &&, vamos considerar o exemplo:

  x <- c(0,1,2)
  y <- c(2,1,0)
  x<1 & y>1   # Retorna um vetor de TRUEs e FALSEs
  [1] TRUE FALSE FALSE
  x<1 && y>1  # Considera somente o primeiro elemento de x e y
  [1] TRUE


Análogo para | e ||.

Funções Matemáticas Comuns

  abs()         # Valor absoluto

  choose()      # Combinação

  exp()         # Exponencial

  factorial()   # Fatorial

  lfactorial()  # Log fatorial

  log()         # Logaritmo

  log2()        # Logaritmo de base 2

  log10()       # Logaritmo de base 10

  sqrt()        # Raiz quadrada

  pi            # 3,14159265

  Inf           # Infinito

  # Infinito:

  1/0

  [1] Inf

  a<-8

  b<-0

  is.infinite(a/b)

  [1] TRUE

  # "Not a number" (NaN):

  0/0

  [1] NaN

  is.nan(Inf/Inf)

  [1] TRUE

Notar que o R não considera NA ou NaN como valores finitos ou infinitos.

  a <- c(4,1,6,NA,NaN)

  is.finite(a)
  [1]  TRUE  TRUE  TRUE FALSE FALSE

 

  is.infinite(a)
  [1] FALSE FALSE FALSE FALSE FALSE

 

  is.na(a)
  [1] FALSE FALSE FALSE  TRUE  TRUE


  is.nan(a)
  [1] FALSE FALSE FALSE FALSE  TRUE

Funções trigonométricas: clicar aqui

Operações com caracteres

  casefold(x)            # converte para letras minúsculas

  casefold(x,upper=TRUE) # converte para letras maiúsculas

  substr(x,2,4)          # extrai do 2o ao 4o caractere de cada elemento de x

  paste(x,"ly",sep="")   # insere "ly" no final de cada elemento de x

  nchar(x)               # número de caracteres em cada elemento de x

  grep("a",x)            # quais elementos de x contém "a" ?

  grep("a|b",x)          # quais elementos de x contém "a" ou "b"?

  grepl("a",x)           # retorna TRUE para os elementos de x que contém "a"

  grepl("^a",x)          # retorna TRUE para os elementos de x que começam por "a"

  agrep("abc",x)         # quais elementos de x contém ocorrências semelhantes a "abc" ?

  agrepl("abc",x)        # retorna TRUE para os elementos de x que contém ocorrências semelhantes a "abc"

  strsplit(x,"a")        # particiona x quando ocorre a letra "a"

  startsWith(x,"a")      # retorna TRUE para os elementos de x que começam por "a"

  endsWith(x,"a")        # retorna TRUE para os elementos de x que terminam por "a"

  sub("a","b",x)         # nos elementos de x, substitui a primeira ocorrência de "a" por "b"

  gsub("a","b",x)        # nos elementos de x, substitui toda ocorrência de "a" por "b"

# Exemplos:

animais <- c("gato","pássaro","minhoca","avestruz","cisne","elefante")

casefold(animais,upper=TRUE)

[1] "GATO"     "PÁSSARO"  "MINHOCA"  "AVESTRUZ" "CISNE"    "ELEFANTE"

substr(animais,2,4)

[1] "ato" "áss" "inh" "ves" "isn" "lef"

paste(animais,"verde",sep=" ")

[1] "gato verde"     "pássaro verde"  "minhoca verde"  "avestruz verde"

[5] "cisne verde"    "elefante verde"   

nchar(animais)

[1] 4 7 7 8 5 8

grep("ve",animais)   # o quarto elemento de animais contém a expressão "ve":

[1] 4

grep("a",animais)    # apenas o quinto elemento de animais não contém "a":

[1] 1 2 3 4 6

grepl("o",animais)   # retorna TRUE para os elementos de animais que contém "o":

[1] TRUE  TRUE  TRUE FALSE FALSE FALSE

grepl("^m",animais)  # retorna TRUE se o elemento de animais começa com "m":

[1] FALSE FALSE  TRUE FALSE FALSE FALSE

agrep("galo",animais)   # NOTA: ver distância Levenshtein

[1] 1

agrepl("galo",animais)  

[1] TRUE FALSE FALSE FALSE FALSE FALSE

strsplit("Axraposaxpulouxaxcercaxexfugiuxparaxaxfloresta","x")

[[1]]

 [1] "A"        "raposa"   "pulou"    "a"        "cerca"    "e"      

 [7] "fugiu"    "para"     "a"        "floresta"

startsWith(animais, "p")  # retorna TRUE para os elementos de animais que começam com "p":
[1] FALSE  TRUE FALSE FALSE FALSE FALSE

endsWith(animais, "o")
[1]  TRUE  TRUE FALSE FALSE FALSE FALSE

endsWith(animais, "ro")
[1] FALSE  TRUE FALSE FALSE FALSE FALSE

​sub("o","K",animais)
[1] "gatK"     "pássarK"  "minhKca"  "avestruz" "cisne"    "elefante"

sub("e","X",animais)
[1] "gato"     "pássaro"  "minhoca"  "avXstruz" "cisnX"    "Xlefante"

gsub("e","X",animais)
[1] "gato"     "pássaro"  "minhoca"  "avXstruz" "cisnX"    "XlXfantX"

  Função trimws()

  # A função trimws(x) remove os espaços em branco no início e no final de x

  x <- "          Saúde Pública          "
  trimws(x)
  [1] "Saúde Pública"

  # ws refere-se a "white space"

  # O argumento "l" pode ser utilizado quando se deseja retirar os espaços em

  # branco no início (left) de x, e "r" pode ser utilizado quando se deseja

  # retirar os espaços em branco (right) no final de x

  trimws(x,"l")
  [1] "Saúde Pública          "


  trimws(x,"r")
  [1] "          Saúde Pública"

 

Visualizando o conteúdo de objetos

# seja um vetor x:

x <- c(2,6,8,3,5,7,2,9,5,7,3,7,3,7,3,9,3,2,7,3,9,7)

 

# exibindo o conteúdo de x:

x

 [1] 2 6 8 3 5 7 2 9 5 7 3 7 3 7 3 9 3 2 7 3 9 7

 

# exibindo o conteúdo de x, usando a função print():

print(x)

 [1] 2 6 8 3 5 7 2 9 5 7 3 7 3 7 3 9 3 2 7 3 9 7

 

# exibindo o conteúdo de x, como uma planilha:

 

View(x)

# seja uma matriz M:

M <- matrix(c(1, 3, 2, 4), ncol = 2, byrow=T, dimnames=list(c("L1","L2"),c("C1","C2")))

# a função View() gera o resultado:

View(M)​​​​​​​

# a função cat() exibe o resultado de vários objetos concatenados:

texto1 <- "A média do vetor x é"

media1 <- mean(x)

cat(texto1,media1)

A média do vetor x é 5.318182>

# Observe que, neste caso, o cursor ficará posicionado na mesma linha

# da exibição. Para o cursor retornar para a linha seguinte, use "\n":

cat(texto1,media1,"\n")

A média do vetor x é 5.318182

# observe que:

animais <- c("gato","pássaro","minhoca","avestruz","cisne")

cat(animais)

# resulta em:

gato pássaro minhoca avestruz cisne>

# o argumento sep= identifica um string que será usado entre cada um dos

# objetos declarados na função cat():

cat(animais,"\n",sep="****")

gato****pássaro****minhoca****avestruz****cisne****

Função all.equal()

A função all.equal(x,y) compara x e y e retorna TRUE se são iguais ou uma diferença relativa se diferentes.

# Exemplos

all.equal(6,3*2)
[1] TRUE

all.equal(6,pi*2)

[1] "Mean relative difference: 0.04719755"

(pi*2-6)/6
[1] 0.04719755

 

Função object.size()

A função object.size(x) exibe uma estimativa da memória que está sendo usada para guardar o objeto x.

# Exemplos

animais <- c("gato","pássaro","minhoca","avestruz","cisne")
object.size(animais)
336 bytes

M <- matrix(c(1, 3, 2, 4), ncol = 2, byrow=T, dimnames=list(c("L1","L2"),c("C1","C2")))
object.size(M)

704 bytes

O símbolo L é usado para denotar um número inteiro.

# Exemplo

a <- 8
b <- 8L
a == b

[1] TRUE

Qual é a vantagem de utilizarmos o símbolo L para denotarmos valores inteiros? Na maioria das vezes, não há vantagens, mas podemos ter uma relativa economia de memória quando utilizamos grandes quantidades de dados. Observe:
 

object.size(c(6,7,3,5,7,3,6))
104 bytes

 

object.size(c(6L,7L,3L,5L,7L,3L,6L))
72 bytes

bottom of page