Programação em R - Parte 3 (Entendendo e Manipulando Objetos)


Programação em R - Aprenda Analtics, Big Data & Ciência de Dados


Confira todos os textos da série Programação em R:

Objetos, seus modos e atributos


As entidades que R opera são tecnicamente conhecidas como objetos. Os exemplos são vetores de valores numéricos (reais) ou complexos, vetores de valores lógicos e vetores de cadeias de caracteres. São conhecidas como estruturas "atômicas", pois seus componentes são todos do mesmo tipo, ou modo, chamados de numérico, complexo, lógico, caractere.

Os vetores devem ter seus valores todos do mesmo tipo. Assim, qualquer vetor dado deve ser inequivocamente lógico, numérico, complexo, caractere. (A única exceção aparente a esta regra é o "valor" especial listado como NA para quantidades não disponíveis).

Observe que um vetor pode estar vazio e ainda possuir um tipo. Por exemplo, o vetor de string de caracteres vazio é listado como caractere (0) e o vetor numérico vazio como numérico (0).

R também opera em objetos chamados de listas, que são sequências de objetos que individualmente podem ser de qualquer tipo. As listas são conhecidas como estruturas "recursivas" e não atômicas, pois seus elementos podem ser listas.

As outras estruturas recursivas são as de função e expressões. As funções são os objetos que fazem parte do sistema R, juntamente com funções escritas do usuário. As expressões como objetos formam uma parte avançada do R.

Pelo tipo de um objeto, queremos dizer o tipo básico de seus constituintes fundamentais. Este é um caso especial de uma "propriedade" de um objeto. Outra propriedade de cada objeto é seu tamanho. As funções type() e length() podem ser usadas ​​para descobrir o tipo e o tamanho de qualquer estrutura definida.

R permite mudanças de tipo quase em qualquer lugar. Por exemplo, com a operação

> z <- 0:="" 9="" p="">

poderíamos colocar

> digitos <- as.character="" p="" z="">

após o qual os digitos vão ser o vetor de caracteres c("0", "1", "2", ..., "9"). Uma coerção adicional, ou mudança de tipo, reconstrói novamente o vetor numérico:

> d <- as.integer="" digitos="" p="">

Agora d e z são iguais. Existe uma grande coleção de funções para coerção de um tipo para outro. É altamente recomendado se familiarizar com estas funções.

Alterar o tamanho de um objeto


Um objeto "vazio" ainda pode ter um tipo. Por exemplo

> e <- numeric="" p="">

faz de e uma estrutura vetorial vazia de tipo numérico. Do mesmo modo, usar a função character () cria um vetor de caracteres vazio, e assim por diante. Uma vez que um objeto de qualquer tamanho é criado, novos elementos podem ser adicionados a ele simplesmente dando-lhe um valor de índice fora do seu alcance anterior. Assim, a operação

> e [3] <- 17="" p="">

faz de e um vetor de tamanho 3, (os dois primeiros elementos têm valor NA). Isso se aplica a qualquer estrutura, desde que o tipo do(s) elemento(s) adicional(is) concordem com o tipo do objeto em primeiro lugar.

Este ajuste automático dos tamanhos de um objeto é usado frequentemente, por exemplo, na função scan() para entrada.

Por outro lado, para truncar o tamanho de um objeto, é necessário apenas uma tarefa para fazê-lo. Portanto, se alfa for um objeto de tamanho 10, então

> alpha <- 1:="" 5="" alpha="" p="">

torna um objeto de tamanho 5 consistindo apenas nos elementos anteriores com índice igual. (Os índices antigos não são retidos, é claro.) Podemos então reter apenas os três primeiros valores por

> length(alfa) <- 3="" p="">

e os vetores podem ser estendidos da mesma maneira.

Obtendo e definindo atributos


A função attr(objeto, nome) pode ser usada para selecionar um atributo específico. Essas funções raramente são usadas, exceto em circunstâncias bastante especiais quando algum novo atributo está sendo criado para algum propósito específico, por exemplo, associar uma data de criação ou um operador com um objeto R. O conceito, no entanto, é muito importante.

Alguns cuidados devem ser tomados ao atribuir ou excluir atributos, uma vez que eles são parte integrante do sistema de objeto usado em R.

Quando é usado no lado esquerdo de uma tarefa, ele pode ser usado para associar um novo atributo ao objeto ou para mudar um existente. Por exemplo

> attr(z, "dim") <- c="" p="">

permite que R trate z como se fosse uma matriz de 10 por 10.

A classe de um objeto


Todos os objetos em R têm uma classe, relatada pela classe de função. Para vetores simples, é apenas seu tipo, por exemplo "numérico", "lógico", "caractere" ou "lista", e "matriz", "fator" e "data.frame" são outros valores possíveis.

Um atributo especial conhecido como a classe do objeto é usado para permitir um estilo orientado ao objeto de programação em R. Por exemplo, se um objeto tiver classe "data.frame", ele será impresso de uma certa maneira, o gráfico irá exibi-lo graficamente de uma certa maneira, e as outras chamadas funções genéricas como o summary() reagirão a ele como um argumento de uma maneira sensível à sua classe.

Para remover temporariamente os efeitos da classe, use a função unclass(). Por exemplo, se x tiver a classe "data.frame", então

> x

irá imprimi-lo em forma de tabela, que é como uma matriz, enquanto que

> unclass (x)

irá imprimi-lo como uma lista comum. Somente em situações especiais você precisa usar esta facilidade, mas é quando você está aprendendo a aceitar a idéia de funções de classe e genéricos.

As funções genéricas e as classes serão discutidas mais adiante na orientação do Objeto, mas apenas brevemente.

Conclusão

Estes conceitos relativos aos tipos de objetos utilizados em R são uma das coisas mais interessantes da linguagem, pois ao escolher o tipo de objeto que vai trabalhar na sua aplicação (data frames, por exemplo, são extremamente úteis!) você determina uma séria de facilidades que vai ter ao manipular os dados através desses objetos.

Estas facilidades vão desde poder utilizar operadores como + e * para simplificar manipulações nos dados, até o uso de funções como as utilíssimas str() e summary() que descrevem a estrutura e fornecem um "resumo" dos dados do objeto, e são sensíveis ao tipo, ou seja, vão apresentar, automaticamente, as informações no formato mais adequado e legível.

Christian Guerreiro

Professor por vocação, blogueiro e servidor público por opção, amante da tecnologia e viciado em informação.


Ensino a distância em Bitcoin & Criptomoedas, além de Tecnologia da Informação: Virtualização com VMware, Big Data com Hadoop, Certificação ITIL 2011 Foundations e muito mais.


Suporte o Tecnologia que Interessa!

Você acha que as informações compartilhadas aqui são úteis?
Então me ajude a produzir ainda mais e melhores conteúdos!


É muito fácil. Basta divulgar nossos treinamentos pra alguém que conheça!


E se for de Salvador, podemos estruturar um curso presencial para sua empresa!

Eu vou ficar muito grato (e quem fizer os curso também :)!