Apresentar os diferentes objetos que o R possui. Construí-los e verificar a diferença entre eles.
O R é uma linguagem de programação orientada a objetos, eles podem armazenar vetores, matrizes, funções, arrays, dataframes e listas. Há duas formas de criarmos objetos no R, a primeira forma e mais utilizada é fazendo uso do operador assignment (formado pelos sinais menor que (<) e menos (-)) apontando para o nome do abjeto. O segundo modo é utilizando o sinal de igual (=), o nome do objeto fica a esquerda do sinal.
# utilizando o operador assignment
objeto_1 <- "utilizando o operador assignment"
objeto_2 <- "utilizando o sinal de igual"
# vetor numerico
vet_num <- 12
# vetor de strings
vet_str <- "a"
# vetor logico
vet_log <- TRUE
utilizaremos a função (aprenderemos sobre funções mais pra frente) de concatenação - c() para juntar dados. Por exemplo suponha que eu quero criar um veotor que armazene as idades de pacientes de uma coorte. Assim posso fazer para os três tipos de vetores.
# vetor numerico
pac_idades <- c(56, 78, 89, 66, 73)
# vetor de strings
pac_nomes <- c("Joaquim", "Josefina", "Maria Cândida", "Alcides", "Pedro")
amostras <- c("a1", "a2", "b1", "c5", "d1")
# vetor logico
fumantes <- c(TRUE, TRUE, FALSE, TRUE, FALSE, FALSE)
alcoolatra <- c(T, T, T, F, F) # posso abreviar as palavras TRUE (T) e FALSE (F)
# criando vetores
conj_A1 <- c(2, 5, 12, 15, 37)
conj_B1 <- c(9, 8, 4, 28, 23)
# operacoes
# soma
soma <- conj_A1 + conj_B1
# subtracao
subtracao <- soma - conj_B1
# multiplicacao
multiplicacao <- conj_A1 * subtracao
# divisao
divisao <- multiplicacao / soma
# somando 50 a todos elementos do elemento "pac_idades"
c(pac_idades + 50)
Na maioria das vezes queremos fazer uma estatística básica dos dados que estamos trabalhando. Abaixo apresento algumas funções relacionado a estatística básica.
# criando vetor
pac_prostate_idades <- c(42, 50, 67, 78, 75)
# valor minimo
min(pac_prostate_idades)
# valor maximo
max(pac_prostate_idades)
# minimo e maximo
range(pac_prostate_idades)
# comprimento do vetor
length(pac_prostate_idades)
# media
mean(pac_prostate_idades)
# mediana
median(pac_prostate_idades)
# resumo estatistico
summary(pac_prostate_idades)
Q_01 - Faça as operações abaixo no ambiente R.
Q_01.1.) Crie dois vetores numéricos e multiplique-os por três.
Q_01.2.) Apresente um resumo estatístico dos vetores criado no Q_01.1.
Q_01.3.) Crie um vetor de cada tipo (numérico, string e lógico)
Algumas vezes não queremos visualizar todos os elementos do vetor, queremos apenas acessar algumas posições. No R precisamos digitar o nome do vetor seguido de um par de colchetes e dentro deles a posição que deseja.
# acessando o terceiro elemento do vetor "pac_nomes".
pac_nomes[3]
# acessando o segundo, quarto e quinto valor de "pac_nomes".
pac_nomes[c(2, 4, 5)]
# criando um vetor com elementos do primeiro ao terceiro elemento de outro vetor
novo_vetor <- pac_nomes[c(1:3)]
# acessando todos os elementos menos o primeiro
pac_nomes[-1]
# trocando valor do primeiro elemento
pac_prostate_idades[1] <- 80
# visualizando o ultimo elemento de um vetor
vet_ALFABETO[length(vet_ALFABETO)]
# filtragem de pac_idades , 75
pac_idades[pac_idades < 75]
Algumas vezes precisaremos criar vetores com peridiocidade, dessa forma apresento abaixo alguns comandos para criação de sequências.
# gerando sequencia do 3 ao 12 com intervalo de 4 com a funcao seq()
sequencia_1 <- seq(from=3, to=13, by=2)
# gerando sequencia do 1 ao 10 com :
sequencia_2 <- 1:10
# gerando sequencia repetindo o 1 5 vezes com a funcao rep()
sequencia_3 <- rep(1, 5)
# repetindo o vetor pac_prostate_idades 3 vezes
sequenlcia_4 <- rep(pac_prostate_idades, 3)
# gerando sequencia com dados aleatorios: 5 elementos, valor minimo: 5 e valor maximo: 30
sequencia_5 <- runif(n=5, min=5, max=30)
# gerando uma distribuicao normal com 15 elementos, media=2 e devio-padrao=0.5
sequencia_6 <- rnorm(n=15, mean=2, sd=0.5)
Em diversos momento quando estivermos trabalhando com dados será necessário criar dados aleatórios para testes. Abaixo apresento a função sample() que possui esse propósito.
# amostras aleatorias sem reposicao
aleat_s.rep <- sample(x=1:15, size=10, replace=FALSE)
# amostras aleatorias com reposicao
aleat_c.rep <- sample(x=1:15, size=10, replace=TRUE)
Quando se trabalha com dados muitas vezes é preciso colocar os dados em ordem crescente ou decrescente vamos utilizar a função sort().
# colocando os dados em ordem crescente
sort(x=pac_idades, decreasing=FALSE )
# colocando os dados em ordem decrescente
sort(x=pac_idades, decreasing=TRUE)
Porém, se desejarmos a POSIÇÃO dos dados naquele vetor, utilizaremos a função order().
# verificando a posicao crescente dos dados dentro do vetor
order(pac_idades)
Podemos também obter o valor de ranks para cada valor dentro do objeto
rank(pac_idades)
Supondo que você está com seus dados numéricos e quer nomeá-los, o que você faria? Abaixo apresento uma maneira para nomear esses elementos e para tal, utilizei a função names() juntamente com a função paste() (que vai juntar caracteres), operador : para gerar uma sequência e a função length() que calcula o tamanho do vetor e por fim o argumento sep= que informo o tipo de separador.
# criando um vetor
tempo_s <- c(10, 25, 27, 17, 19)
# nomeando os elementos
names(tempo_s) <- paste("Amostra", 1:length(tempo_s), sep = "_")
As funções do R é baseada em tipo de objeto. Muitas funções vão funcionar para um tipo de objeto e para outro tipo não. Assim, abaixo é demonstrado como identificar o tipo e atributos do objeto que está trabalhando.
# identificando o tipo do objeto
typeof(tempo_s)
# identificando a atributos do objeto
## classe
class(tempo_s)
## dimensoes
dim(tempo_s)
## comprimento
length(tempo_s)
## nomes
names(tempo_s)
Abaixo seguem alguns comandos que são úteis e facilitam no trabalho de programação com R.
# gerando um vetor complexo
vet_compl <- c(2i+1, 0i+5, 1i^2-1)
# vetor de caracteres utilizando o conjunto de letras do alfabeto em caixa alta do R
vet_ALFABETO <- LETTERS[1:15]
# juntando vetores
c(pac_idades, vet_filtrado)
# vetores com valores especiais
vetor_esp_1 <- c(0, Inf, -Inf, NaN, NA)
# exclui valores NA e NaN do vetor
na.exclude(vetor_esp_1)
# esconde valores NA e NaN do vetor
na.omit(vetor_esp_1)
# retornando posicao dos elementos obedecendo um criterio
which(pac_idades > 70)
which.min(pac_idades)
which.max(pac_idades)
# mostrando os valores do final para o inicio
rev(pac_idades)
Q_02) Responda as questões abaixo referente aos vetores. Q_02.1) Um aluno de química no laboratório da universisdade onde estuda marcou os tempos referentes a velocidade de uma enzima X em diferentes condições. Os tempos em segundos que ele marcou foram: 16, 14, 9, 7, 3. Crie um objeto chamdo tempo e armazene esses valores dentro dele. Usando funções do R encontre o tempo mínimo, máximo e o tempo médio dos experimentos.
Q_02.2) O mesmo aluno da questão anterior continuou com os experimentos e acrescentou mais dois valores em seus resultados: 11 e 15. Junte esses valores com os dados do exercício anterior sem ter que digitar todos os valores novamente.
Q_02.3) Calcule a velocidade média de uma decomposição de um composto de 12 gramas que levou 3 minutos para se decompor totalmente.
Q_02.4) Um pesquisador fez um experimento coletou 12 amostras, sendo de três tipos diferentes. Crie um vetor com caracteres representando essas 12 amostras divididas em três tipos diferentes.
Q_02.5) Crie três jogos de mega-sena. Utilize a função sample() para gerar os valores. Lembre-se que os valores variam de 1 a 60 e deve-se escolher 6 números.
Q_02.6) Utilizando a mesma lógica do exercício anterior simule o resultado de sete jogadas de um dado.
Outro tipo de vetor é o chamado de vetor de fatores. Quando trabalhamos com este tipo de vetor os valores são registrados em níveis (levels) do fator diferente dos vetores de caracteres.
# criando um vetor de fatores
vet_fat <- factor(c("X1", "X1", "X1", "X2", "X3", "X3"))
# verificando a quantidade por niveis
table(vet_fat)
Se os dados do vetor de fatores possui uma hierarquia podemos ordená-los através do do agumento levels.
# criando o vetor de fatores
vet_fat.2 <- factor(c("pequeno","grande", "medio", "grande", "grande", "grande", "pequeno", "pequeno", "medio"),
levels = c("pequeno", "medio", "grande"),
ordered = TRUE)
O R pode definir um vetor em uma determinada classe, no entanto, posso transformá-lo em outra classe.
# criando um vetor
vet_num <- c(1, 3, 5, 7, 9)
# transformando-o em um vetor de fatores
as.factor(vet_num)
# transformando-o em um vetor de caracteres
as.character(vet_num)
# transformando-o em um vetor logico
as.logical(vet_num)
# transformando-o em um vetor numerico
as.numeric(vet_num)