Escolar Documentos
Profissional Documentos
Cultura Documentos
Thiago
Cavalcanti).
Polícia Federal (Agente de Polícia)
Informática - 2023 (Pré-Edital)
Autor:
Diego Carvalho, Equipe
Informática e TI, Renato da Costa,
Thiago Rodrigues Cavalcanti
21 de Junho de 2023
Índice
1) Linguagem R - Introdução
..............................................................................................................................................................................................3
LINGUAGEM R - INTRODUÇÃO
CONCEITOS BÁSICOS
Figura 1 - (1) Trabalhar com todos os conjuntos de dados. (2) Muitos pacotes. (3) Várias bibliotecas gráficas. (4) Cálculos rápidos.
(5) Linguagem abrangente. (6) Código aberto.
Já as desvantagens são:
Agora ... se eu pedir para você preencher a lacuna ... R é uma linguagem
____________! O que você acha? Interpretada, certo?! Preenche a lacuna e grifa
para você não esquecer!
Vamos em frente!
Hora de abrir o R ... muito provavelmente você terá esse ícone na área
de trabalho (esse do lado esquerdo!)
A instalação padrão do R vem com uma interface gráfica para o usuário (Graphical User
Interface – GUI). No Windows, você
encontrará o R no menu iniciar e no
Mac você verá o ícone do R entre
seus aplicativos. No meu caso,
consigo encontrar o executável RGui
(64-bits) na busca do Windows. Ao
executar o mesmo, a seguinte
interface é aberta.
Apesar de o R vir com uma interface
gráfica interessante, existe um
Ambiente de Desenvolvimento
Integrado (Integrated Development
Environment- IDE) chamado
RStudio, com várias funcionalidades
e gratuito. O RStudio possui algumas
vantagens em relação ao R Gui:
• Highlight do código;
• Autocomplete;
• Match automático de parênteses e chaves;
• Interface intuitiva para objetos, gráficos e script;
• Criação de “projetos” com interface para controle de versão;
• Facilidade na criação de pacotes;
• Interação com HTML, entre outras.
Você pode abrir o RStudio em seu computador e iniciar um novo Script em “File” -> “New
File” -> “New RScript”. Você também pode fazer isso com CTRL + SHIFT + N ou acessando
o botão abaixo.
1. Script: A tela superior esquerda do RStudio é o editor de texto onde você vai
escrever seus Scripts. Ele possui code highlighting entre outras funcionalidades.
2. Console: No canto inferior esquerdo fica o console. O console nada mais é do que
uma seção aberta de R, em que os comandos são executados.
3. Área de trabalho e histórico: Ficam no canto superior direito. Os objetos criados
e o histórico dos comandos podem ser acessados ali.
4. Arquivos, Gráficos, Pacotes, Ajuda: Ficam no canto inferior direito. Você pode
explorar pastas e arquivos diretamente do RStudio na aba “Files”; os gráficos que
forem feitos apareceram na aba “Plots”. Os pacotes instalados em sua máquina
estão listados em “Packages”. As ajudas das funções aparecem em “Help”. E o
“Viewer” serve para visualização de páginas em HTML e JavaScript.
Essas áreas podem ser vistas na figura a seguir:
Nossa aula apresentará os conceitos básicos sobre o assunto que são suficientes para
provas de concursos. Caso você queira se aprofundar um pouco mais no assunto e
conhecer mais sobre a linguagem sugiro o seguinte curso gratuito e on-line:
http://material.curso-r.com/
>1+1
E aperte CTRL+ENTER (CMD+ENTER no mac). Isso envia o comando para o console e o resultado
é exibido logo abaixo.
> 1+1
[1] 2
Agora escreva o seguinte código no Script.
> # Gráfico dos números de 1 a 10
> plot(1:10)
O primeiro comando #Gráfico dos números de 1 a 10 é, na verdade, um comentário.
Comentários nos scripts do R são precedidos do símbolo #, e tudo que estiver após # não será
executado. É uma boa prática comentar seu código! Isso faz com que ele seja de fácil
manutenção, tanto para você mesmo (acredite, depois de um tempo você não lembrará o que
fez) quanto para seus colegas.
O segundo comando diz ao R para plotar um gráfico. Aperte CTRL+ENTER nas duas linhas. O
gráfico aparecerá no canto inferior direito do RStudio.
Vamos fazer alguns exercícios para ver se você compreendeu tudo que vimos até aqui:
Agora que já sabemos alguns conceitos básicos sobre R e o R Studio vamos tentar
organizar melhor as ideias apresentando alguns outros pontos importantes da linguagem.
Se você nunca programou deixa eu conversar um pouco contigo. Vamos mudar de contexto!
Qual a comida que você mais gosta? Pode ser a pizza caseira da sua tia, a dobradinha da
sua mãe ou a feijoada da sua sogra ... Mas o que essas comidas tem em comum? Uma
receita!!! Uma receita que estabelece os ingredientes, a quantidade e a sequência correta
de ações para que seu prato predileto fique perfeito.
Agora vamos pensar no contexto computacional. O computador é uma máquina que
obedece às suas instruções e se você quiser fazer com que ele faça algum cálculo ou
desenhe algum gráfico, é necessário passar os comandos corretos. Esses comandos
devem ser escritos em uma linguagem de computação, que pode ser compilada ou
interpretada. Você deve se lembrar que R é uma linguagem INTERPRETADA.
Os dados processados pelo nosso programa precisam ser armazenados em algum lugar,
numa planilha Excel ou num banco de dados. Durante o processamento, vamos trazer os
dados para o nosso ambiente e armazená-los em variáveis ou símbolos. Vamos criar uma
variável e associar a essa variável um valor.
A linha acima permite a criação de uma variável denominada olamundo, o símbolo <- é
usado para atribuição, ele faz com que o valor presente do seu lado direito seja atribuído a
variável do lado esquerdo. Esse valor fica disponível no ambiente e pode ser acessado. A
função print() pode ser usada para imprimir o valor da variável no console. Observamos o
comando na listagem abaixo.
> print(olamundo)
[1] "HelloWorld!"
Se você ainda não instalou o R e RStudio na sua máquina, gostaria de reforçar que a prática
dos comandos vai ajudar significativamente seu aprendizado.
Ok! Já temos uma variável no nosso ambiente, mas queremos mais!! Agora vamos definir
um vetor. Um vetor pode ser construído a partir da concatenação de valores do mesmo tipo.
No nosso caso vamos criar um conjunto de dados numérico simples que é formado pelos
números 1, 2 e 4 e nomeá-lo como x:
Mais uma vez, temos o operador de atribuição padrão em R (<-). Você também pode usar
=, mas isso é desencorajado, pois não funciona em algumas situações especiais. Observe
que não há tipos fixos associados a variáveis. Ou seja, não definimos que os valores 1, 2 e
4 são números, mas o R entende que estamos criando um vetor numérico. Aqui, atribuímos
um vetor a x. Sendo x uma variável, pode ter seu valor alterado, basta usar o símbolo de
atribuição e passar outro valor válido.
O c significa concatenar. No exemplo acima, estamos concatenando os números 1, 2 e 4.
Mais precisamente, estamos concatenando três vetores de um elemento que consistem
nesses números. Isso ocorre porque qualquer número também é considerado um vetor
de um elemento.
Agora também podemos escrever o seguinte:
que define q como um vetor com os valores (1,2,4,1,2,4,8) (sim, incluindo os duplicados).
Perceba que estamos concatenando duas vezes o conjunto de valores de x e, em seguida
o 8 em um novo conjunto.
Agora vamos confirmar que os dados estão realmente em x. Para imprimir o vetor na tela,
basta digitar seu nome. Se você digitar qualquer nome de variável (ou qualquer expressão)
enquanto estiver no modo interativo, o R imprimirá o valor dessa variável (ou expressão) no
Console. Os programadores familiarizados com outras linguagens, como o Python, acharão
esse recurso familiar. Para o nosso exemplo, insira isto:
> x
[1] 1 2 4
Sim, com certeza, x consiste nos números 1, 2 e 4. Outro ponto interessante é que você
pode acessar elementos individuais de um vetor via colchetes “[ ]” . Veja como podemos
imprimir o terceiro elemento de x:
> x [3]
[1] 4
A expressão x [2: 3] refere-se ao subvetor de x que consiste dos elementos nas posições 2
e 3, que são 2 e 4.
Podemos encontrar facilmente a média e o desvio padrão do nosso conjunto de dados, da
seguinte forma:
> mean(x)
[1] 2,333333
> sd (x)
[1] 1.527525
Isso demonstra, novamente, que a simples digitação de uma expressão no prompt (console)
é suficiente para imprimir seu resultado. Na primeira linha, nossa expressão é a função
média aritmética, em inglês mean(x). O valor de retorno da chamada é impresso
automaticamente, sem exigir uma chamada para a função print( ) de R que apresentamos
anteriormente.
> y
[1] 2,333333
> y # imprime
[1] 2,333333
> data ()
Um dos conjuntos de dados é chamado de Nile e contém dados sobre o fluxo de água do
rio Nilo ao longo de 100 anos. Essa lista é uma série temporal que vai de 1870 a 1970.
Vamos encontrar a média e o desvio padrão desse conjunto de dados:
Se estivermos usando o RGui, uma janela aparece com o histograma, conforme mostrado
na figura abaixo. Este gráfico é simples, mas R tem todos os tipos de gráficos para plotagem.
Dentro de cada tipo de gráfico você pode manipular algumas das suas características, por
exemplo, no histograma você pode alterar o número de categorias especificando o
parâmetro. Uma chamada ao comando hist(z,breaks=12) desenharia um histograma do
conjunto de dados z com 12 caixas ou intervalos.
Você também pode criar rótulos mais agradáveis, fazer uso de cores e outras alterações
para criar um gráfico mais informativo e atraente. Quando você se familiarizar mais com o
R, poderá construir gráficos de cores ricas e complexas de beleza impressionante (mas isso
será depois da sua aprovação), por enquanto seu foco é passar no concurso. Enquanto isso
vejamos o gráfico com os dados do Nilo em uma apresentação simples.
> q ()
Save workspace image? [y/n/c]: n
Esse último prompt pergunta se você deseja salvar suas variáveis para que você possa
retomar o trabalho mais tarde. Se você responder “y”, todos esses objetos serão carregados
automaticamente na próxima vez que você executar R. Esse é um recurso muito importante,
Vejamos algumas questões sobre esses assuntos para você não avançar no
conteúdo sem ter a certeza de que está aprendo tudo!
Comentário: Vamos comentar cada uma das alternativas acima. Desta vez, nem todas estavam
certas. Espero que você tenha percebido! :)
1) Alternativa errada, essa é a interface do RStudio.
2) Certa! Se usarmos o plot(Orange) ele vai exibir o seguinte resultado na aba Plots:
==275324==
3) Certa. Perceba que a variável Nome possui uma letra maiúscula. Logo, se você precisar
utilizá-la novamente deve respeitar essa característica, caso contrário o R não vai encontrar
a variável.
4) Errada. Perceba que as funções padrão do R são em inglês, logo, para calcular a média você
deve usar a função mean(Nile). Se tentarmos rodar o comando media(Nile) vamos obter a
seguinte mensagem de erro:
Error in media(Nile) : could not find function "media"
Gabarito: E C C E
OBJETOS EM R
c) dataframe: O mesmo que uma matriz, mas aceita vetores de tipos diferentes
(numérico e caracteres). Geralmente nós guardamos nossos dados em objetos
do tipo data frame, pois sempre temos variáveis numéricas e variáveis categóricas
(por exemplo, largura do rio e nome do rio, respectivamente). Similar a uma tabela
do SQL, um banco de dados.
e) funções: as funções criadas para fazer diversos cálculos também são objetos
do R.
Todo objeto possui atributos intrínsecos: tipo e tamanho. Com relação ao tipo ele pode ser:
numérico, caractere, complexo e lógico. Existem outros tipos, como por exemplo,
funções ou expressões, porém esses não representam dados. As funções mode() e
length() mostram o tipo e tamanho de um objeto, respectivamente. Por exemplo:
> x<-c(1,3,5,7,11)
> mode(x)
> length(x) #mostra o tipo e tamanho do objeto x
[1] "numeric"
[1] 5
> x <- 1
> class(x)
[1] "numeric"
Tabela 1 - Quando um objeto suporta tipos diferentes ele é chamado de heterogêneo, quando admite apenas objetos do mesmo tipo é
denominado homogêneo.
Saber as diferenças entre os diversos tipos de objetos é importante para um uso mais
adequado do R. Existem vários tipos de objetos que podem ser criados e manipulados. Já
vimos que o R pode trabalhar com vetores - objetos que armazenam mais de um valor. A
função c() é usada para criar um vetor a partir de seus argumentos. Os argumentos de c()
podem ser escalares ou vetores.
Há ainda outras formas de se gerar um vetor. Por exemplo, para gerar uma sequência de
números inteiros usam-se os “dois pontos”. Veja:
[1] 1 2 3 4 5 6 7 8 9 10
Uma maneira mais geral de produzir sequências de valores é usando a função seq() que
tem como argumentos o início, fim e o incremento da sequência, por exemplo,.
seq(1,10,1) é o mesmo que 1:10.
Outra função útil para produzir vetores é a função rep() que retorna o primeiro argumento
repetido o número de vezes indicado pelo segundo argumento, o comando rep(1,10) cria
um vetor com 10 valores 1.
PACOTES
Para que a função esteja disponível é necessário carregarmos a biblioteca. Já sabemos que
para isso devemos usar a funçõa library().
> library(MASS) # Carrega pacote
> x <- mvrnorm(n=100, mu, Sigma) # Agora funciona
> x
Para ver o que está disponível para utilização do R, utilize a função search(). Note que o
pacote MASS agora está lá.
> search()
[1] ".GlobalEnv" "package:MASS" "tools:rstudio" "package:stats"
[5] "package:graphics" "package:grDevices" "package:utils" "package:datasets"
Às vezes, você pode ter o mesmo nome de funções em pacotes distintos. Neste caso, se
ambos forem carregados, a função que prevalece é a do pacote que foi carregado por
último. Uma outra forma de resolver isso é usar o nome do pacote e o operador “::” antes
de chamar a função e descrever o nome do pacote que você está querendo usar.. Neste
caso não há ambiguidade.
> x <- MASS::mvrnorm(n=100, mu, Sigma)
Grande parte dos pacotes do R estão centralizados em um repositório chamado CRAN (The
Comprehensive R Archive Network), com diversos espelhos ao redor do mundo. Se o
pacote não estiver na sua máquina, você vai precisar baixar e instalar o mesmo. Essas
ações vão deixar o pacote disponível para carregamento na sua área de trabalho. Para
instalar um pacote, use a função install.
O legal é que qualquer pessoa pode fazer um novo pacote e disponibilizar para a
comunidade, o que acelera bastante o desenvolvimento da ferramenta. Dificilmente você
vai fazer uma análise apenas com as funções básicas do R e quase sempre vai existir um
pacote com as funções que você precisa.
Existem três principais maneiras de instalar pacotes. Em ordem de frequência, são:
Via CRAN (Comprehensive R Archive Network):
> install.packages("nome-do-pacote").
Via Github:
> devtools::install_github("nome-do-repo/nome-do-pacote").
Esses pacotes instalados via CRAN são pacotes de contribuições feitas por
desenvolvedores da comunidade R.
FUNÇÕES DO R-BASE
> is.numeric(numero)
[1] TRUE
> is.character(numero)
[1] FALSE
> is.character(texto)
[1] TRUE
> is.logical(texto)
[1] FALSE
as.xxx()
Você pode forçar a conversão de um vetor de uma classe para outra com as funções
as.xxx() (sendo “xxx” a classe). Entretanto, nem sempre essa conversão faz sentido, e pode
resultar em erros ou NA’s. NA significa não disponível em inglês, falaremos sobre ele mais
adiante. Vamos mostrar alguns exemplos do uso das funções as.xxx():
lenght()
Para obter o tamanho de um objeto, utilize a função length(). Por exemplo:
> lenght(y)
Aproveito para inserir aqui uma nova característica da linguagem. Comandos no R podem
ser colocados na mesma linha se separados por ponto-e-vírgula (;), por exemplo.
> length(ItensDoChurrascoDePosse);length(x);length(logico)
str()
Para ver a estrutura de um objeto no R, use a função str(). Esta é uma função simples, mas
talvez das mais úteis do R.
plot()
O R já vem com funções básicas que fazem gráficos estatísticos de todas as naturezas. As
funções abaixo podem ser usadas para melhorar a apresentação dos dados e facilitar o
entendimento das relações entre eles.
• Vantagens: são rápidas e simples.
• Desvantagens: são feias e difíceis para gerar gráficos complexos.
Nesta seção, mostraremos como construir alguns tipos de gráficos usando as funções base
do R, existem outros pacotes mais robustos como o ggplot2.
Gráfico de dispersão
Para construir um gráfico de dispersão, utilizamos a função plot(). Seus principais
parâmetros são:
• x, y - vetores para representarem os eixos x e y.
• type - tipo de gráfico. Pode ser pontos, linhas, escada, entre outros.
Para mais detalhes sobre os argumentos, ver help(plot).
Além de gerar gráficos de dispersão, tentar chamar a função plot(objeto_diferentao) para
qualquer tipo de objeto do R geralmente gera um gráfico interessante! Sempre tente fazer
isso, a menos que seu objeto seja um data.frame com milhares de colunas! Vejamos um
exemplo:
> plot(x, y)
Se quisermos podemos inserir entre parênteses o parâmetro type = "l" indicando que
desejamos que os pontos sejam interligados por linhas. O comando por ser visto abaixo:
Histograma
> hist(rnorm(1000))
Veja que se definirmos o parâmetro breaks, o nosso histograma será dividido em n barras,
no exemplo abaixo temos que breaks = 6.
Boxplot
Para construir esse tipo de gráfico, utilizamos a função boxplot(). Os principais parâmetros
são:
• X - O vetor numérico para o qual o boxplot será construído.
Vejamos um exemplo, neste exemplo usamos mais um conjunto de dados do próprio R. O
InsectSprays é um data.frame que apresenta a contagem de insetos em unidades
experimentais agrícolas tratadas com diferentes inseticidas. Possui duas colunas ou
variáveis count e spray. Observe que o argumento col= “purple” muda a cor da caixa do
boxplot.
Para mapear duas variáveis no gráfico, utilizamos um objeto da classe formula (~) e o
argumento data=. Veja que o comando abaixo descreve para cada tipo de inseticida (A, B,
C, D, E e F) a variação da quantidade de insetos contabilizados.
Gráfico de barras
Para construir gráficos de barras, precisamos combinar as funções table() e barplot(). No
gráfico abaixo, criamos uma tabela de frequências com a função table() e, em seguida,
construímos o gráfico com a função barplot(). Lembre-se que a função data carrega bases
de dados de pacotes instalados. Neste caso, como vamos usar uma base do pacote ggplot2
vamos precisar instalar o mesmo.
> install.packages("ggplot2")
> library(ggplot2)
> data(diamonds, package = "ggplot2")
> tabela <- table(diamonds$color)
> barplot(tabela)
Também podemos mapear duas variáveis a um gráfico de barras utilizando tabelas de dupla
entrada. VADeaths representa o gráfico de mortes por 1000 mil habitantes na Virgínia em
1940 divididos por faixa etária, sexo e local de residência (urbana ou rural).
> VADeaths
Rural Male Rural Female Urban Male Urban Female
50-54 11.7 8.7 15.4 8.4
55-59 18.1 11.7 24.3 13.6
60-64 26.9 20.3 37.0 19.3
65-69 41.0 30.9 54.6 35.1
70-74 66.0 54.3 71.1 50.0
> barplot(VADeaths)
names()
Objetos podem ter elementos nomeados. Por exemplo, vamos nomear os elementos do
vetor notas.
Quando colocamos nomes nos elementos de um vetor ou nas colunas e linhas de uma
matriz, é possível acessar os dados usando esses nomes. Por exemplo:
sort() e order()
A função order() retorna um vetor com as posições para que um objeto fique em ordem
crescente.
> sort(numero)
numero3 numero2 numero1
-10.0 12.3 100.0
Perceba que o resultado das duas funções acima sempre apresenta os vetores ordenados
de forma crescente (do menor para o maior). As duas funções têm o parâmetro decreasing
(decrescente) que, quando TRUE, retornam o vetor de em ordem decrescente. Neste caso
o código seria escrito da seguinte forma:
ls() e objects()
Para listar todos os objetos que estão na sua área de trabalho, você pode usar a função ls()
ou objects(). Faça um teste e veja se todos os objetos que você criou até aqui aparecem na
lista.
rm()
A função rm(objeto) remove um objeto da área de trabalho. Ele recebe um parâmetro de
texto ou uma lista com os nomes dos objetos para remover.
save.image() e load()
Para salvar uma cópia da sua área de trabalho você pode utilizar a função save.image():
summary()
A função summary() é uma função genérica usada para produzir resumos de resultados de
várias funções. A função chama métodos específicos que dependem da classe do primeiro
argumento. Vejamos um exemplo:
> mediaLinear<-lm(hwy ~ displ, mpg)
> summary(mediaLinear)
Call:
lm(formula = hwy ~ displ, data = mpg)
Residuals:
Min 1Q Median 3Q Max
-7.1039 -2.1646 -0.2242 2.0589 15.0105
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 35.6977 0.7204 49.55 <2e-16 ***
displ -3.5306 0.1945 -18.15 <2e-16 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 3.836 on 232 degrees of freedom
Multiple R-squared: 0.5868, Adjusted R-squared: 0.585
F-statistic: 329.5 on 1 and 232 DF, p-value: < 2.2e-16
Não quero, por favor, que você se preocupe em entender os valores acima!!! Se
preocupe apenas em perceber que a função summary descreve várias características do
objeto mediaLinear.
Aritimética
O R tem uma série de operadores de aritmética básica e todos são vetorizados. Os
operadores nada mais são do que um atalho conveniente para funções, isto é, 1+2 é a
mesma coisa de ‘+‘(1,2). Assim, temos a lista de operadores:
• Soma (+),
• Subtração (-),
• Multiplicação (*)
• Divisão (/)
• Exponenciação (^)
• Resto da divisão (%%)
Além dos operadores básicos, há uma série de funções matemáticas, tais como:
Há também diversas funções trigonométricas, como seno sin(), cosseno cos(), tangente
tan() e outras.
> sin(0.5);cos(0.4);tan(3)
[1] 0.4794255
[1] 0.921061
[1] -0.1425465
Há também funções que operam com todos os valores do vetor. Por exemplo, a função
sum() retorna o somatório ou a função prod() o produtório. Essas funções também têm sua
versão acumulada. Vamos criar um vetor x e brincar um pouco com ele:
> x
[1] 1.0 2.0 -3.0 4.0 -20.3
> mean(x) # média
[1] -3.26
> sum(x) # somatório
[1] -16.3
> prod(x) # produtório
[1] 487.2
> cumsum(x) # somatório acumulado
[1] 1.0 3.0 0.0 4.0 -16.3
> cumprod(x) # produtório acumulado
[1] 1.0 2.0 -6.0 -24.0 487.2
CONSTANTES
Descrição Exemplo
– NaN “not a number” (0/0) ou log(-1)
– NA valor faltante (desconhecido)
– NULL valor indefinido (objeto nulo)
MATRIZES
Criando matrizes
O processo de criação de uma matriz no R é relativamente simples. No exemplo a seguir,
vamos criar uma matriz com 100 elementos numéricos em sequência de 1 a 100. Nossa
matriz terá 10 linhas e 10 colunas.
Percebemos que o R, por default, preenche a matriz por colunas e não por linhas. No
entanto, podemos criar uma matriz preenchendo primeiro as linhas e depois as colunas.
Para isso, basta definirmos o argumento byrow = TRUE. Vejamos o resultado do exemplo
anterior com o preenchimento por linhas e depois por colunas.
seq(1, 100),
ncol = 10,
nrow = 10,
byrow = TRUE)
> matriz01 * 10
Já funções como mean(), sum(), sd() funcionam também como ocorre com os vetores, ou
seja, levam em consideração todos os elementos da matriz. Há uma série de funções úteis
para trabalharmos com matrizes, seguem algumas:
Função Descrição
Manipulando matrizes
==275324==
Assim como nos vetores, podemos selecionar quaisquer elementos de uma matriz. A
diferença é que, para selecionarmos um elemento em uma matriz, devemos informar em
qual linha e coluna se encontra o dado que queremos. Digamos que o elemento que
desejamos obter o valor se encontra na terceira linha da quarta coluna da nossa matriz01,
criada anteriormente. A solução é a seguinte:
> matriz01[3, 4]
[1] 24
Muitas vezes não desejamos extrair o dado de apenas um elemento, mas de uma linha ou
de uma coluna inteira de uma matriz. Para selecionarmos uma linha da nossa matriz01,
utilizamos o seguinte comando: matriz01[i, ]. Onde i é a posição da linha que desejamos
selecionar. Vejamos como fazemos para selecionar a linha 4 da matriz01:
> matriz01[4, ]
[1] 31 32 33 34 35 36 37 38 39 40
> matriz01[2:6, ]
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
[1,] 11 12 13 14 15 16 17 18 19 20
[2,] 21 22 23 24 25 26 27 28 29 30
[3,] 31 32 33 34 35 36 37 38 39 40
[4,] 41 42 43 44 45 46 47 48 49 50
[5,] 51 52 53 54 55 56 57 58 59 60
[1] 5 15 25 35 45 55 65 75 85 95
> notas
[,1] [,2] [,3] [,4]
[1,] 5 7 5 6
[2,] 9 7 4 6
[3,] 6 7 4 5
[4,] 6 7 4 7
[5,] 8 10 5 5
[6,] 8 9 9 6
[7,] 4 4 8 10
[8,] 6 8 10 5
[9,] 8 10 7 8
[10,] 8 5 9 5
Para deixar a leitura mais fácil, podemos nomear as linhas e colunas através das
funções rownames() e colnames(), respectivamente. Segue exemplo:
Uma vez com nomes das linhas e colunas, podemos utilizar os mesmos para realizar filtros
em nossa matriz. Para exibir apenas as notas da aluna Fernanda, fazemos:
> notas["Julia", ]
bim-1 bim-2 bim-3 bim-4
8 10 5 5
Unindo matrizes
A união de matrizes é bastante importante para formarmos um conjunto de dados maior a
partir de dados menores. Essa união pode ocorrer de duas formas: por linhas e por
colunas. Para unirmos duas matrizes através das colunas, utilizamos a função cbind(). Já
para fazer a união através das linhas, usamos a função rbind().
Vamos continuar os exemplos com nossa matriz notas. No entanto, considere que, durante
o ano de 2020, dois alunos foram transferidos da escola e suas notas de matemática nos
dois primeiros bimestres estão armazenadas na matriz notas_transf. Vamos aos dados:
> notas_transf
bim-1 bim-2 bim-3 bim-4
Dimas 6 8 NA NA
Alessandra 8 9 NA NA
Para consolidar os dados, precisamos unir as matrizes notas e notas_transf por linhas. Para
executar tal tarefa, vamos usar a função rbind().
Para unirmos duas matrizes por colunas, o procedimento é similar. Porém, temos que
observar que para unir matrizes através das colunas, devemos ter o mesmo número
de linhas em todas as matrizes que desejamos unir. A lógica se aplica também à união
por linhas, ou seja, as matrizes envolvidas devem ter o mesmo número de colunas.
Resumindo ...
cbind() é a função combina vetor, matrizes ou quadro de dados por colunas.
FUNÇÕES
Uma das grandes vantagens de usar uma linguagem de programação é automatizar o seu
trabalho ou análise. Você será capaz de realizar grande parte do trabalho utilizando as
funções internas do R ou de pacotes de terceiros em um script. Entretanto, você ganha ainda
mais flexibilidade e agilidade criando suas próprias funções. Uma função, no R, é definida
da seguinte forma:
• o comando function() diz para o R que você está definindo uma função.
Criemos uma função simples que retorna o quadrado de um valor passado como parâmetro:
Funções criam um ambiente local e, em geral, não alteram o objeto ao qual são aplicadas.
Isto é, se você passa um valor x para uma função que eleva x ao quadrado, o valor original
de x não muda. Funções tomam objetos como argumentos e criam outro objeto, modificado,
como resultado. Na maior parte dos casos, a ideia é que uma função no R não tenha efeitos
colaterais, isto é, que ela não modifique objetos fora de seu ambiente.
ESTRUTURAS DE CONTROLE
Para escrever funções mais complexas pode ser necessário utilizarmos algumas estruturas
de controle como if, ifelse e for. Vejamos algumas informações a respeito deles.
Há ocasiões em queremos ou precisamos executar parte do código apenas se alguma
condição for atendida. O R fornece três opções básicas para estruturar seu código dessa
maneira: if(), if() else e ifelse(). Vejamos cada uma delas.
A estrutura básica do if() é a seguinte:
Os comandos if() e if() else não são vetorizados. Uma alternativa para casos como esses é
utilizar a função ifelse(). A função ifelse() tem a seguinte estrutura básica:
Minha experiência com programação tem demonstrado que usar funções que operam sobre
vetores ou matrizes é muito mais performático do que usar outras funções não vetorizadas.
Laços com for (repetições)
Frequentemente, precisamos executar uma sequência de comandos um certo número de
vezes. O conjunto de comandos é executado uma vez e, em seguida, o fluxo de execução
retorna ao primeiro comando do conjunto e o processo continua um certo número de vezes.
Esta estrutura de repetições de uma sequência de comandos é chamada de laço (em inglês
loop). Cada uma das repetições é chamada de iteração.
Suponhamos você queira somar os elementos de um vetor numérico e não tivéssemos a
função sum() à nossa disposição. Um maneira de realizar esta soma no R é usar uma
estrutura como no exemplo abaixo:
x = c(1:10, 21:30)
soma = 0
for (i in 1:length(x)) {
soma = soma + x[i]
}
soma
## [1] 310
Os laços formados com a palavra-chave for executam os comandos entre chaves quantas
vezes a expressão entre parênteses especificar. No exemplo acima, o comando soma =
soma + x[i] vai ser executado para cada valor de i, que assume em sequência os valores de
1 até o comprimento do vetor x. Assim, a variável soma vai adicionando sucessivamente os
valores do vetor x.
Existe uma função chamada seq_len() que substitui a expressão 1:length(). Então laço for
acima poderia ser escrito como:
for (i in seq_len(x)) {
soma = soma + x[i]
}
Laços aninhados
Laços podem ser aninhamos quantas vezes forem necessárias, embora, normalmente,
mais de três níveis de aninhamento seja raramente necessário.
O código abaixo calcula a soma dos elementos de uma matriz, onde no laço externo, i
percorre as linhas da matriz, e, no laço interno, j percorre as colunas da matriz.
Inicialmente i = 1 e j assume o valor 1. O laço interno é executado para cada valor de j, que
assume sucessivamente os valores de 1 a 5. No laço interno, a variável soma vai
adicionando os respectivos valores de x[1,j]. Quando j chegar a 5, o fluxo retorna para o
laço mais externo, i é incrementado de uma unidade e o fluxo retorna para o laço interno,
onde j novamente assume os valores de 1 a 5. A sequência de iterações se encerra quando
i chega à última linha e j percorre as colunas da matriz.
x <- matrix(11:35, 3, 5)
## Warning in matrix(11:35, 3, 5): comprimento dos dados [25] não é um submúltiplo
## ou múltiplo do número de linhas [3]
soma = 0
for(i in seq_len(nrow(x))) {
for(j in seq_len(ncol(x))) {
soma = soma + x[i,j]
}
}
soma
## [1] 270
laços com while
Laços do tipo while possuem a seguinte estrutura:
while ( expressão lógica ) { * sequência de comandos }*
Inicialmente a expressão lógica é avaliada. Se ela for verdadeira, a sequência de comandos
entre chaves é executada. Em seguida a expressão lógica é novamente avaliada e, assim
por diante, até que a expressão lógica seja falsa e então o fluxo de execução sai do laço.
Vamos reescrever o código para calcular a soma dos elementos de um vetor numérico
utilizando o laço com while. Observe a expressão lógica i <= length(x) que é testada a cada
iteração. Inicialmente i é igual a 1 e é incrementado em uma unidade a cada iteração.
Quando i atinge o valor igual ao comprimento de x, o laço é interrompido.
x = c(1:10, 21:30)
soma = 0
i=1
while (i <= length(x)) {
soma = soma + x[i]
i=i+1
}
soma
## [1] 310
No exemplo, o laço com for é mais simples. Em laços com while, é preciso tomar cuidado
para que a expressão lógica não seja sempre verdadeira. Caso a expressão lógica nunca
se torne falsa, o laço nunca terminará. Esse tipo de situação é conhecido como loop infinito.
RESUMO
Nesta aula, aprendemos que R é uma linguagem de programação multi-paradigma
(funcional e orientada a objetos), dinâmica, fortemente tipada, voltada à manipulação,
análise e visualização de dados. O código fonte do R está disponível sob a licença GNU
GPL (software livre) e as versões binárias pré-compiladas são fornecidas para Windows,
Macintosh, e muitos sistemas operacionais Unix/Linux.
A linguagem R disponibiliza uma ampla variedade de técnicas estatísticas e gráficas,
incluindo modelação linear e não linear, testes estatísticos clássicos, análise de séries
temporais (time-series analysis), classificação, agrupamento e outras. R é facilmente
extensível através de funções e extensões, e a comunidade R é reconhecida pelas
contribuições feitas por meio de pacotes.
A R é uma linguagem interpretada tipicamente utilizada através de um Interpretador de
comandos. Como muitas outras linguagens, a R suporta matrizes aritméticas. A estrutura
de dados da R inclui escalares, vetores, matrizes, dataframes (similares a tabelas numa
base de dados relacional) e listas. O sistema de objetos da R é extensível e inclui objetos
para, entre outros, modelos de regressão, séries temporais e coordenadas geoespaciais.
Mais uma vantagem de utilizar a linguagem R está no RStudio, que é uma IDE, ou ambiente
de desenvolvimento integrado, para o R. Com sua utilização gratuita, o RStudio é uma
excelente ferramenta para desenvolvimento em R, extremamente visual quando comparado
com ambientes de outras linguagens e também com o console do R, e muito simples de se
utilizar.
Ao longo da aula, mostramos vários comandos e apresentamos suas respectivas descrições
e sintaxe. Abaixo vamos fazer um resumo destes comandos separados por categoria:
PEDINDO AJUDA e COMPREENDENDO OBJETOS
Comando Descrição
IMPORTANDO E EXPORTANDO
Comando Descrição
CRIANDO DADO
Comando Descrição
Comando Descrição
PLOTANDO GRÁFICOS
Comando Descrição
hist(x)
barplot(x)
boxplot(x)
QUESTÕES COMENTADAS
Como não temos muitas questões sobre R para alegrar nossa aula e abrilhantar nosso
estudo, resolvemos ressuscitar uma banca histórica de concurso público conhecida como
TRC. Criativa, inteligente, dinâmica e objetiva a banca vai focar nos principais pontos do
assunto com questões.
Comentário: Em construções de loop como while, repeat, e podemos usar next para pular para
a próxima iteração. Vejamos um exemplo:
x <- 1:5
for (val in x) {
if (val == 3){
next
}
print(val)
}
[1] 1
[1] 2
[1] 4
[1] 5
Gabarito: C
[1] 2
Gabarito: C
Comentário: names é uma função assessora genérica para lista o nome das variáveis. Os
métodos padrão obtêm e definem o atributo "names" de um vetor (incluindo uma lista) ou
pairlist.
Gabarito: C
16. Ano: 2018 Banca: CESPE Assunto: Informática para Polícia Federal Cargo:
Agente Conteúdo: Linguagem R
Neste caso o valor retornado pela função print vai retornar como resultado o vetor 4 ,
14 e 18. Logo, a alternativa está incorreta.
94. Nesta alternativa atribuímos valores booleanos as variáveis x e y. Em seguida,
pedimos para imprimir o atributo xy, que não existe no sistema. Isso retornar um erro
conforme visto abaixo.
> x <- TRUE
> y <- FALSE
> print (xy)
Error in print(xy): object 'xy' not found
17. Ano: 2018 Prova: Perito – Polícia Federal Banca: CESPE Assunto:
Conhecimentos básicos – banco de dados e teoria da informação.
Com relação à programação Python e R, julgue os itens que se seguem.
43 Considere os comandos a seguir, na linguagem R, os quais serão executados no
ambiente do R, e considere, ainda, que > seja um símbolo desse ambiente.
Nossa sugestão é que você tente usar o R para fazer alguns exercícios que vão ajudar você
==275324==
na fixação do conteúdo. Você pode usar como referência a própria aula ou os slides da
videoaula sobre R.
18. Banca: TRC Ano: 2020 Concurso: Simualdo
Abra o R Studio e tente fazer o seguinte exercício.
1. Remova todos os objetos do ambiente de trabalho.
2. Crie objetos com nomes dados_Agente, dados_Perito, dados_Papi, dados_Escrivao.
Faça com que os objetos sejam do tipo numérico, character, lógico e inteiro.
3. Verifique a classe e a estrutura dos objetos criados.
4. Use ls() para listar apenas os dados de Perito. E depois para listar apenas os
dados de Agente.
5. Use rm() para remover apenas os dados de Escrivao (dica: você vai precisar de
usar o resultado de ls()).
6. Salve sua área de trabalho com o nome exercicio_objetos_aula_de_R.RData.
Uma possível solução para os itens acima:
1. rm(list=ls()) # remove todos os objetos
2. dados_Agente <- 10.5
dados_Perito <- "texto"
dados_Papi <- TRUE
dados_Escrivao <- 24L
3. class(dados_Agente)
class(dados_Perito)
class(dados_Papi)
class(dados_Escrivao)
str(dados_Agene)
str(dados_Parito)
str(dados_Papi)
str(dados_Escrivao)
4. perito <- ls(pattern="Perito")
agente <- ls(pattern="Agente")
5. rm(list=(ls(pattern="Escrivao"))
1) save.image(file=" objetos_aula_de_R.
LISTA DE QUESTÕES
1. Ano: 2020 Prova: Simulado Banca: TRC Assunto: Linguagem R
Julgue os itens baixo a respeito dos conceitos básicos do R.
As funcionalidades do R são divididas em vários pacotes.
2. Ano: 2020 Prova: Simulado Banca: TRC Assunto: Linguagem R
Julgue os itens baixo a respeito dos conceitos básicos do R.
O sistema base R contém, entre outras coisas, o pacote base necessário para executar o R e
contém as funções mais fundamentais.
3. Ano: 2020 Prova: Simulado Banca: TRC Assunto: Linguagem R
Julgue os itens baixo a respeito dos conceitos básicos do R.
Os pacotes utils, lang e tools são considerados pacotes básicos do R.
4. Ano: 2020 Prova: Simulado Banca: TRC Assunto: Linguagem R
Julgue os itens baixo a respeito dos conceitos básicos do R.
A função abaixo pula as primeiras 20 iterações do loop.
for(i in 1:100)
if(i <= 20) {
next
}
print(n)
}
5. Ano: 2020 Prova: Simulado Banca: TRC Assunto: Linguagem R
Julgue os itens baixo a respeito dos conceitos básicos do R.
O resultado da função abaixo é 5
x <-3
switch(x, 2+2, mean(1:10), rnorm(5))
6. Ano: 2020 Prova: Simulado Banca: TRC Assunto: Linguagem R
Julgue os itens baixo a respeito dos conceitos básicos do R.
next é usado para pular uma iteração dentro do loop.
7. Ano: 2020 Prova: Simulado Banca: TRC Assunto: Linguagem R
Julgue os itens baixo a respeito dos conceitos básicos do R.
Uma instrução break é usada dentro de um loop (repaet, for, while) para interromper as
iterações e fazer fluir o controle para fora do loop.
8. Ano: 2020 Prova: Simulado Banca: TRC Assunto: Linguagem R
Julgue os itens baixo a respeito dos conceitos básicos do R.
break e next são duas estruturas de controle para controlar explicitamente o loop.
9. Ano: 2020 Prova: Simulado Banca: TRC Assunto: Linguagem R
Julgue os itens baixo a respeito dos conceitos básicos do R.
Escrever funções é uma atividade secundária de um programador R.
10. Ano: 2020 Prova: Simulado Banca: TRC Assunto: Linguagem R
Julgue os itens baixo a respeito dos conceitos básicos do R.
==275324==
As funções são definidas usando a diretiva function() e são armazenadas como objetos R.
11. Ano: 2020 Prova: Simulado Banca: TRC Assunto: Linguagem R
Julgue os itens baixo a respeito dos conceitos básicos do R.
A função graph() é usada para plotagem de gráficos no R base.
12. Ano: 2020 Prova: Simulado Banca: TRC Assunto: Linguagem R
Julgue os itens baixo a respeito dos conceitos básicos do R.
A função names() lista nomes das variáveis em um data.frame.
13. Ano: 2020 Prova: Simulado Banca: TRC Assunto: Linguagem R
Julgue os itens baixo a respeito dos conceitos básicos do R.
x <- c(1, 2, NA, 4, NA, 5)
deuruim <- is.na(x)
print(deuruim)
O resultado do código acima é :
FALSE FALSE TRUE FALSE TRUE FALSE
14. Ano: 2020 Prova: Simulado Banca: TRC Assunto: Linguagem R
Julgue os itens baixo a respeito dos conceitos básicos do R.
O pacote dplyr pode ser instalado a partir do CRAN, usando library(“dplyr”).
15. Ano: 2020 Prova: Simulado Banca: TRC Assunto: Linguagem R
Julgue os itens baixo a respeito dos conceitos básicos do R.
Arquivos contendo scripts R terminam com a extensão .R
16. Ano: 2018 Banca: CESPE Assunto: Informática para Polícia Federal Cargo:
Agente Conteúdo: Linguagem R
Julgue os próximos itens, relativos a noções de programação Python e R.
GABARITO
1. C
2. C
3. E
4. C
5. E
6. C
7. C
8. C
9. E
10. C
11. E
12. C
13. C
14. E
15. C
16. E E
17. C