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

  1. As linguagens de programação possuem diferentes paradigmas.↩︎
  2. Vetor é um tipo básico do  R .↩︎
  3. 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 verdadeirofalso pelo R . Assim, TruetrueFalsefalset ou f retornarão um erro se forem usados.↩︎
  4. 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 .↩︎
  5. 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.↩︎
  6. 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↩︎
  7. 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 .↩︎
  8. 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.↩︎
  9. 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.↩︎
  10. 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↩︎
  11. 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.↩︎
  12. 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 .↩︎
  13. 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.↩︎
  14. 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.↩︎
  15. 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).↩︎
  16. 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.↩︎
  17. 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. ↩︎