As características do R

Para usar o R como linguagem computacional para pesquisa social, é importante conhecer a estrutura do programa. Não é suficiente aprender alguns comandos e reproduzir os scripts como receitas prontas. A grande vantagem da informática está na capacidade quase que ilimitada de tornar pensamentos e ideias em resultados replicáveis. E para que a imaginação não se limite aos exemplos de códigos inicialmente disponíveis, mas leve os recursos computacionais ao máximo do potencial criativo de quem está fazendo a pesquisa, se faz necessário conhecer mais a fundo a lógica de programação com o R .
As linguagens de programação, desde que começaram a ser popularizadas na década de 50 do século XX, se desenvolveram a partir de diferentes paradigmas. Primeiro foram as linguagens de máquina, depois os pseudocódigos em Assembler e então as linguagens de maior abstração (mais próximas da linguagem humana, principalmente o inglês, do que da linguagem de máquina), com os paradigmas procedural, funcional, orientado à objetos e paradigma lógico. Nessas linguagens não há o termo “objeto,” apenas variáveis, procedimento e funções (que são procedimentos que retornam algum valor).
O R , criado na década de 90, tem por princípio os paradigmas funcional e orientado a objeto. Aqui abre-se uma grande discussão na área de computação sobre esses termos, variáveis, funções, objetos, métodos, classes. O importante a se considerar, nesse caso, não são as definições conceituais em termos puros, mas a forma como se pode utilizar o R para otimizar os scripts que serão escritos para analisar dados.
O R está construído em cima das linguagens C++ e Fortran. Logo, do ponto de vista da execução do programa, tudo é executado como variáveis e funções. Contudo, a estrutura lógica do R foi erguida a partir da concepção de uma linguagem funcional e orientada à objeto. Uma linguagem funcional, grosso modo, reduz a necessidade de construção de passos procedimentais.
De modo geral, a linguagem orientada a objetos, reduz a necessidade de funções, uma vez que cada objeto teria as definições de classes (tipos de dados e outros atributos) e métodos (funções) correspondentes. Assim, a intenção era que, com poucas linhas de código e poucos comandos, se pudesse executar as análises em R.
Por exemplo, a função plot() é utilizada para gerar gráficos. Os usuários não precisam memorizar diferentes comandos para gerar diferentes tipos de gráficos. A função plot() “saberá” reconhecer qual tipo de gráfico deve ser criado a partir dos atributos do objeto que se está passando como parâmetro. Na execução da instrução plot(notas), se o objeto notas for do tipo numeric vector, a saída do gráfico será um diagrama de pontos. Se for, por exemplo, for do tipo factor (fator, ou dados categóricos), a função plot(notas) irá gerar um gráfico de barras.
Como a função plot() “sabe” qual o gráfico mais apropriado a ser gerado? Internamente, a função lê as informações do objeto notas (type, mode, length e attributes) e executa o subconjunto de procedimentos (chamados métodos na linguagem de programação orientada à objeto) necessários para gerar o gráfico adequado.
Essa grande vantagem do R é também uma das grandes fontes de confusão para usuários iniciantes. Vamos supor que o objeto notas seja um data.frame. O console retornará um erro, porque a funçãoplot()não tem como gerar um gráfico de um data.frame (ou de uma lista) no qual não estão identificado os valores para as coordenadas x e y.
Conhecer os diferentes tipos de objetos e como as funções atuam sobre os objetos é importante para ter um uso mais produtivo do R. Uma das principais fontes de erro e da percepção de dificuldade no uso do R está justamente na estrutura orientada à objetos, que foi criada para facilitar a interação com os usuários. Por isso, o uso da função de ajuda deve ser feito sempre que se tiver dúvida ou erro no uso de algum procedimento, por exemplo: help(plot) ou simplesmente ?plot.

Variáveis e objetos

Em qualquer linguagem de programação, as variáveis são utilizadas para guardar valores que serão utilizados no processamento de alguma função. Como uma analogia, pode-se dizer que uma variável é um nome que identifica uma área da memória do computador, reservada para armazenar um valor. Esse valor alocado na memória permanecerá o mesmo até que seja modificado por alguma função ou procedimento do programa.
Quando uma variável é criada, por exemplo nota <- 8.5, um espaço na memória do computador passa a ter como endereço o identificador nota, no qual é alocado o valor 8.5. Quando se digita o no prompt do console a palavra nota o R procura na memória pelo endereço correspondente da variável e retorna o valor que lá estava guardado: 8.5.
Diferente de algumas outras linguagens de programação, toda variável é armazenada como um objeto no R . Pode-se pensar em um objeto como um agrupamento de elementos que possuem atributos em comum. Esses atributos permitem que objetos diferentes sejam manipulados de forma específica pelas mesmas funções. Ter elementos agrupados com atributos comuns faz sentido em uma linguagem com o R (herdeira do S ), que foi criada primeiramente para o tratamento e análise estatística de dados. Hoje em dia, o R com seus mais de 15 mil pacotes tem funções que vão muito além da estatística. Mas o tratamento de dados continua sendo a característica principal do R

Vetores: os objetos básicos

Para o R , uma variável é um objeto do tipo vector (vetor).  O uso do termo vetor e escalar é bastante abrangente em várias áreas do conhecimento. De modo geral, escalares (termo que origem em escala ou graus de magnitude) sempre se referem à valores singulares, vetores referem-se a um conjunto de escalares. Na matemática e na física, o sentido é semelhante, mas possuem propriedades diferentes, dependendo do campo do conhecimento que se está aplicando o conceito (campos de força, álgebra linear, etc.).
Em computação, de modo geral, uma variável com um valor singular é um escalar. Uma variável que faz referência a um conjunto de outras variáveis singulares é um vetor. No R , de acordo com Patrick Burns \cite{burns2011} a palavra “vetor” refere-se primeiramente ao vetor atômico (atomic vector), que é um objeto no qual todos os elementos são do mesmo tipo, em oposição à lista (list), que é um objeto no qual os elementos podem ser de tipos diferentes.
Um vetor pode ser entendido também como objeto básico do R, a partir do qual são construídos os demais tipos de objetos, com tamanho (length) arbitrário, e sem nenhum outro atributo (attribute) além do nome (name), conforme avaliado pelas funções is.vector() e as.vector(). 
Para facilitar a compreensão, de início, vamos adotar aqui uma definição mais simples: um vetor é o tipo de objeto mais básico do R, só tem uma dimensão e todos os elementos devem ser do mesmo tipo.
Para ilustrar essa definição, podemos comparar com uma planilha, como Excel ou Google Planilhas. Cada célula individual da planilha, no R se denominaria como um valor escalar (scalar). Um vetor seria uma única coluna da planilha (ou seja, uma dimensão) com todos os elementos (células na planilha ou escalares no R ) do mesmo tipo, podendo ser números, caracteres ou do tipo lógico (verdadeiro ou falso).  
Os vetores são os tipos fundamentais de objetos de dados no R 3. Podem ser classificados em dois grupos: vetores atômicos (atomic vectors), no qual todos os elementos devem ser do mesmo tipo, e as listas (list), que podem ter elementos de diferentes tipos \cite{wickman2019}.
Os vetores possuem três propriedades:
  1. type (tipo) - pode ser um dos seguintes formatos:
  2. logical (lógico) - pode assumir os valores TRUE (verdadeiro) ou FALSE (falso)4;
  3. numeric - qualquer valor numérico5;
  4. character - qualquer letra ou caractere representado entre aspas duplas ou simples6;
  5. complex (complexo) - armazena um número complexo7.
  6. raw - armazena valores em bytes8.
  7. length (tamanho) - informa a quantidade de elementos contidas no objeto9.
  8. attributes (atributos) - definem as informações que permitem diferentes formas de manipulação dos objetos10.
As informações sobre objetos criados no R são mostradas na Aba Environment (Ambiente) do RStudio , conforme pode se observar na Figura 1 :