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