A expressão turmas_l$noturno$resultado_final
retornará o mesmo
resultado. Pode-se extrair subconjuntos de uma lista com índices ou
nomes.
Listas dão um poder muito grande aos programas em R para o
tratamento de qualquer forma de dado. Há pacotes especializados em
tratamento de listas, como {rlist}
. Vetores e listas formam a base da
manipulação de dados no R . Em análise de dados sociais, vamos
trabalhar na maior parte do tempo com uma classe de objeto que é um tipo
especial de lista, o data.frame
.
Notas
- As linguagens de programação possuem diferentes paradigmas.↩︎
- Vetor é um tipo básico do R .↩︎
- Os valores TRUE e FALSE podem ser substituídos por T ou F, ou 1 ou 0.
As palavras em minúscula não são reconhecidas como verdadeiroe falso pelo R . Assim, True, true, False, false , t ou f retornarão um erro se
forem
usados.↩︎
- Se não houver especificação em contrário, o R armanezará os
valores todos numéricos como double, isto com é, com espaço para
alocar as casas decimais. O R possui diferentes denominações
para os mesmos tipos de dados. Isso ocorre para manter a referência
aos diferentes padrões que contribuíram para a formulação do programa
ao longo dos anos. Originalmente, o R se baseou na linguagem S (padrões S3 e S4), que define o modo numeric como
opção básica. A função typeof() retorna o tipo do objeto conforme está
de fato armazenado na memória do computador. Por exemplo: typeof(nota)
retornará ”double”. A função mode(nota) retornará a mesma informação,
só que com a nomenclatura numeric. Um valor integer contém apenas
números inteiros, sem frações. Para forçar a declaração de um objeto
como literalmente integer (e não double ou numeric) deve-se adicionar
um L (de Literal) ao final do número. Exemplo: nota <- 10L .
Forçar a definição de número inteiro tem utilidade em situações
especiais, quando, por exemplo, se necessita de precisão numérica de
cálculo, dado que computadores fazem arredondamos nos valores decimais
(conhecido como erro de ponto flutuante) que podem, em alguns casos,
trazer resultados inesperados. Pode-se forçar os valores numeric ou
double a serem armazenados como inteiros também com a função
as.integer(). Quando um valor double é transformado em integer, a
parte decimal é perdida. Por exemplo, as.integer(8.5) resultará em 8 .
Para forçar que valores integer sejam tratados como double usa-se a
função as.double() ou as.numeric(). Na maioria das vezes não é
necessário se preocupar com essas diferenças. O R converterá
os valores integere double automaticamente quando necessário para a
realização dos cálculos matemáticos, sem que o usuário precise se
preocupar com isso. Na Aba Environment do RStudio o tipo do
objeto é mostrado como o modo, por exemplo: um valor numérico como 10
ou 8.5, será armazenado como double e será mostrado como do tipo
numeric. Um valor forçado com a função as.integer() ou como 10L será
armazenado e mostrado como integer. Um valor integer convertido com a
função as.double() ou as.numeric() será armazenado como double e
mostrado como tipo numeric na Aba Environment doRStudio .↩︎
- Um elemento do tipo character é passado para um vetor como valores
entre aspas ” duplas ou ’ simples . Por exemplo, turma <-
c(”matutino”,”vespertino”). Em algumas linguagens, há diferença entre
o uso de aspas simples e duplas. Em R ,não existe diferença.
As aspas duplas são mais comumente utilizadas. As aspas simples são
utilizadas quando se quer incluir as aspas duplas na cadeia de
caracteres (string). Um número pode ser inserido como character. Por
exemplo: cod_ibge <- ”310567”. Nesse caso, o número está
armazenado como símbolo e não como tipo numeric. Não será possível
fazer cálculos com esse valor. Um vetor é um objeto no qual todos os
elementos são do mesmo tipo. Quando se cria o vetor com um valor
character entre outros numéricos, por exemplo: sequencia <-
c(1,2,3,”4”,5,6), todos os demais elementos são convertidos também em
character. A função typeof(sequencia) informará que o tipo do vetor
sequencia é
character.↩︎
- Números complexos são pares ordenados, escritos na forma normal com
uma parte real e uma parte imaginária representada pela letra i, como
por exemplo 5+2i . Um número imaginário é igual a raiz quadrada de -1.
Números complexos não são muito comuns em análise estatísticas de
dados e não utilizaremos esse tipo de dados nessa fase de aprendizagem
do R. Esses números tem uma utilização maior em engenharia, sobretudo
em engenharia elétrica, e matemática, por exemplo na resolução de
equações polinomiais. Para ciência dos dados, uma aplicação dos
números imaginários está na álgebra matricial. Em ciência social
computacional são utilizados na compreensão de fenômenos complexos, a
partir da base matemática dos fractais. Mas, números complexos não
devem ser vistos como algo exótico ou difícil de ser aprendido. Na
verdade, adolescentes no Brasil aprendem essa matéria como parte do
Currículo Mínimo de Matemática do Ensino Fundamental. Geralmente, esse
conteúdo é ofertado na terceira série do ensino médio. Caso tenha
curiosidade e queira rememorar seus números imaginários, assista as
videoaulas sobre números complexos da Khan Academy em português,
disponível em:
https://pt.khanacademy.org/math/algebra-home/alg-complex-numbers↩︎
- Por exemplo, o código infosoc_raw <- charToRaw(”INFOSOC”)
converte a palavra “INFOSOC” em bytes e armazena no objeto
infosoc_raw. O valor armazenado retorna sete elementos: 49 4e 46 4f
53 4f 43 que correspondem às letras I N F O S O C . O tipo raw
raramente é aplicado em análise de dados e não vamos fazer uso desse
recurso nessa fase de aprendizagem do R .↩︎
- No caso de um objeto atomic vector e de uma matrix a propriedade
length retorna o número de elementos. No caso de um objeto do tipo
list a propriedade length retorna o número de componentes da lista.
Para um objeto do tipo data.frame a propriedade length retorna o
número de colunas, isto é, o número de
variáveis.↩︎
- Os atributos são metadados, ou seja, informações que definem como um
objeto deverá ser manipulado por uma função. Por exemplo, uma matriz é
um vetor que tem o atributo dimensões (dimensions). Todos os
principais tipos de objetos usados em análise de dados com oR , como matrizes (matrix) e fatores (factor) são vetores com
atributos específicos. A função que mostra e altera os atributos de um
objeto é attr(). A função attributes() também permite recuperar ou
visualizar os atributos de um ojbeto. A função structure() é usada
para atribuir ou modificar os atributos de um
objeto.↩︎
- Se você tiver dúvida ou não conhece a notação simbólica do somatório
em matemática, assista o seguinte vídeo da Khan academy em português:
Notação
de somatório (vídeo) | Séries | Khan
Academy↩︎
- Laços ou loops são estruturas fundamentais em lógica de programação.
Veremos mais sobre isso adiante quando for abordado o conteúdo sobre a
criação de funções no R . Caso queira conhecer mais detalhes
sobre os laços com a função for() e os laços de repetição, confira em
Loops
no R: usando o for() | Análise Real (analisereal.com).
Confira também o Livro de Jackson Aquino
R
para cientistas sociais (uesc.br) \cite{aquino2019} , capítulo 10.7Loops for e While , p.
131.↩︎
- O símbolo de dois pontos : é um operador de sequência. Pode ser ler a
instrução 1:n da seguinte forma: de 1 até
n .↩︎
- Os colchetes [ ] são operadores utilizados para a seleção
(subsetting) de valores dentro de um objeto, como no exemplo
notas[i]. As chaves { } tem uma função bem diferente. São
utilizadas para delimitar o início e o fim de uma função, como no caso
de for(i in 1:n) {…}. Os parênteses servem para delimitar o escopo
ou os parâmetros para a execução de uma função, como no exemplo da
função for() ou no caso da média das notas mean(notas). Em uma
expressão matemática, os parênteses também servem para definir a ordem
das operações, conforme as regras da
álgebra.↩︎
- O operador lógico de igualde é um sinal de igual duplo ==O sinal de
igualdade simples = indica atribuição de valor a uma variável.
i = 7 atribuição - o vetor i recebe o valor 7
i == 7 comparação - retorna TRUE porque i tem o valor
7.↩︎
- O limite máximo de elmentos em um vetor é determinado pela
disponibilidade de memória RAM (Random Access Memory) do computador.
Mas, não pode ultrapassar 231 - 1 elementos (mais de
dois bilhões, ou, precisamente, 2.147.483.647
elementos).↩︎
- Vamos acrescentar o sufixo _l ao nome turmas para indicar que se
trata de uma lista. Isso não é necessário, mas ajuda a diferenciar os
tipos de objetos com os quais estamos
trabalhando.↩︎
- Quando se extrai um subconjunto de um vetor, usa-se o operador [],
como nos exemplos anteriores com vetores. Pode-se usar o mesmo
operador em uma lista. A principal diferença entre [] e
[[]], segundo o manual do R, é que o primeiro permite
selecionar vários elementos de uma só vez, enquanto o segundo só
permite um elemento. Outra diferença é que [] retorna uma lista
com a mesma estrutura de nomes da lista original. O operador
[[]] não preserva os nomes, apenas os valores dos elementos.
De modo prático, usa-se com mais frequência []para vetores,
matrizes e data.frames. Utiliza-se [[]] para selecionar
valores únicos aninhados (recursivamente) em listas. Para mais
informações, consulte a ajuda do R, digitando o comando ?“[” no
prompt doR. ↩︎