Bioestatística
Prof. Dr. Edson Zangiacomi Martinez
Faculdade de Medicina de Ribeirão Preto
Universidade de São Paulo (USP)
Esta página está em construção!
Todo seu conteúdo não é definitivo...

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 & e &&, 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
​
