Tutorial R Módulo 2. Tipos e estruturas de dados no R

Disciplina de Ecologia Numérica1

Autores

Prof. Elvio S. F. Medeiros

Laboratório de Ecologia

Universidade Estadual da Paraíba

Campus V, João Pessoa, PB

Data de Publicação

12 de setembro de 2023

Resumo
No R, uma linguagem de programação amplamente utilizada para análise de dados e estatísticas, os tipos e estruturas de dados desempenham um papel fundamental na manipulação e organização das informações.

1 Introdução

No R, uma linguagem de programação amplamente utilizada para análise de dados e estatísticas, os tipos e estruturas de dados desempenham um papel fundamental na manipulação e organização das informações. Você vai conhecer esses tipos de estruturas de dados a seguir, mas antes se familiarize com como o R funciona.

Para começar a usar o R e analisar os dados do Projeto PPBio, abra o RStudio, verifique sua interface (Figura 1) e siga as instruções a seguir.

Figura 1: Interface típica do RStudio e nome dos paineis ou janelas.
Mensagens de erro e avisos no R

No contexto da linguagem de programação R, mensagens de erro (errors) e mensagens de aviso (warnings) que aparecem em vermelho no painel de console. Elas são formas de feedback do sistema que indicam problemas ou situações potencialmente problemáticas durante a execução do código. Aqui está uma breve explicação de cada um:

  1. Erro (Error):
    • Um erro ocorre quando algo no código não está correto ou não pode ser executado como esperado.
    • Isso pode ser causado por sintaxe incorreta, uso incorreto de funções, operações inválidas, referências a objetos que não existem, entre outros problemas.
    • Quando ocorre um erro, a execução do código é interrompida e uma mensagem de erro é exibida no console em vermelho, indicando o tipo de erro e, muitas vezes, a linha onde ocorreu.
  2. Aviso (Warning):
    • Não indica erro. Um aviso é emitido quando algo no código pode resultar em um comportamento indesejado ou em resultados inesperados, mas não interrompe necessariamente a execução do código.
    • Os avisos geralmente indicam situações que merecem atenção, como conversões de tipos de dados que podem perder informações ou funções que estão sendo usadas de maneira que pode levar a resultados questionáveis.
    • Os avisos são exibidos em vermelho no console e fornecem informações sobre a natureza do aviso e, possivelmente, como abordá-lo.

É importante prestar atenção a mensagens de erro e avisos, pois eles fornecem insights sobre problemas em seu código ou potenciais fontes de comportamento inesperado. Resolver erros é fundamental para que o código funcione conforme o esperado. Embora os avisos não interrompam a execução, investigá-los pode ajudar a evitar problemas futuros ou melhorar a qualidade do código.

Agora você pode começar a escrever seu código no console. Digite “Início do R Módulo” no console clique em Run (no canto superior direito do painel de edição de código) ou Ctrl+Entere veja o que acontece:

"Início do R Módulo"
[1] "Início do R Módulo"

O R mostra o que você escreveu, e apresenta este [1] do lado. Isso significa que seu resultado foi apresentado na primeira linha. Como você pode, o R imprime de volta o resultado de comandos que você dá. Você agora pode tentar as operações basicas.

10+5
[1] 15

O R usa os seguintes símbolos para as operações básicas:

+ Adição

Subtração

/ Divisão

* Multiplicação

^ Potência

sqrt Raiz quadrada

Teste agora outras possibilidades com as operações básicas.

2 Tipos e estruturas de dados no R

O R oferece uma variedade de tipos e estruturas de dados que permitem aos cientistas de dados e analistas manipular e organizar informações de forma eficiente. A escolha da estrutura de dados correta depende das necessidades específicas de análise e do tipo de dados que você está lidando.

  1. Tipos de Dados Básicos:
    • Numéricos: Representam valores numéricos, como inteiros ou números de ponto flutuante.
    • Caracteres: Armazenam texto e são usados para representar sequências de caracteres.
    • Lógicos: Armazenam valores lógicos (TRUE ou FALSE), úteis para expressar afirmações condicionais.
  2. Vetores:
    • Os vetores são a estrutura de dados mais básica no R.
    • Eles podem conter elementos de um único tipo de dado (exemplo: vetor numérico, de caracteres ou lógico).
    • Os vetores são criados usando a função c().
  3. Matrizes:
    • Matrizes são vetores bidimensionais, onde os elementos são organizados em linhas e colunas.
    • Todos os elementos de uma matriz devem ser do mesmo tipo de dado.
    • Matrizes podem ser criadas usando a função matrix().
  4. Listas:
    • Listas são estruturas de dados flexíveis que podem conter elementos de diferentes tipos.
    • Os elementos de uma lista podem ser acessados por meio de índices ou nomes.
    • Listas são criadas usando a função list().
  5. Data Frames:
    • Data frames são estruturas de dados tabulares semelhantes a planilhas ou tabelas de banco de dados.
    • Cada coluna de um data frame pode conter um tipo de dado diferente.
    • Data frames são amplamente usados para armazenar e manipular conjuntos de dados.
    • São frequentemente criados com funções como data.frame() ou lidos de arquivos externos.
  6. Fatores:
    • Fatores são usados para representar variáveis categóricas ou de fatores.
    • São úteis para análises estatísticas e gráficos.
    • Podem ser criados com a função factor().
  7. Arrays:
    • Arrays são estruturas multidimensionais que podem conter elementos de um único tipo de dado.
    • São semelhantes às matrizes, mas podem ter mais de duas dimensões.
    • Arrays são criados com a função array().
  8. Tabelas Hash:
    • Tabelas hash são estruturas de dados que associam chaves a valores.
    • Não são nativas do R, mas podem ser implementadas com pacotes como o hash.

3 Reconhecendo a estrutura dos dados do R em uma matriz multivariada

3.1 Organização básica

rm(list=ls(all=TRUE)) #limpa a memória

Instalando os pacotes necessários para esse módulo

install.packages("openxlsx") #importa arquivos do excel
library(openxlsx)

Os códigos acima, são usados para instalar e carregar os pacotes necessários para este módulo. Esses códigos são comandos para instalar pacotes no R. Um pacote é uma coleção de funções, dados e documentação que ampliam as capacidades do R (R CRAN (R Core Team 2017) e RStudio) (Team 2022). No exemplo acima, o pacote openxlsx permite ler e escrever arquivos Excel no R. Para instalar um pacote no R, você precisa usar a função install.packages().

Depois de instalar um pacote, você precisa carregá-lo na sua sessão R com a função library(). Por exemplo, para carregar o pacote openxlsx, você precisa executar a função library(openxlsx). Isso irá permitir que você use as funções do pacote na sua sessão R. Você precisa carregar um pacote toda vez que iniciar uma nova sessão R e quiser usar um pacote instalado.

Agora vamos definir o diretório de trabalho. Esse código é usado para obter e definir o diretório de trabalho atual no R. O comando getwd() retorna o caminho do diretório onde o R está lendo e salvando arquivos. O comando setwd() muda esse diretório de trabalho para o caminho especificado entre aspas. No seu caso, você deve ajustar o caminho para o seu próprio diretório de trabalho. Lembre de usar a barra “/” entre os diretórios. E não a contra-barra “\”.

Usaremos uma matriz multivariada (sítios x espécies, matriz comunitária) do Projeto PPBio chamada ppbio**.xlsx que está no diretório “C:/Meu/Diretório/De/Trabalho/Planilha.xlsx”

Note que o sómbolo # em programação R significa que o texto que vem depois dele é um comentário e não será executado pelo programa. Isso é útil para explicar o código ou deixar anotações.

Ajuste a segunda linha do código abaixo para refletir “C:/Seu/Diretório/De/Trabalho/Planilha.xlsx”.

Definindo o diretório de trabalho e installando os pacotes necessários:

getwd()
setwd("C:/Seu/Diretório/De/Trabalho")

O símbolo ? é usado para acessar a documentação de uma função ou um pacote no R. Como mostrado acima você pode saber mais sobre a função getwd(), usando o comando ?getwd. Isso vai abrir uma página no menu de ajuda com a descrição, os argumentos, os valores de retorno e os exemplos da função getwd(). Você também pode usar o símbolo ? para obter informações sobre um pacote inteiro. Por exemplo, se você quiser saber mais sobre o pacote openxlsx, você pode digitar ?openxlsx. Isso vai abrir uma página com a visão geral, a instalação, os recursos e as referências do pacote solicitado.

3.2 Importando a planilha

Note que o sómbolo # em programação R significa que o texto que vem depois dele é um comentário e não será executado pelo programa. Isso é útil para explicar o código ou deixar anotações. Ajuste a segunda linha do código abaixo para refletir “C:/Seu/Diretório/De/Trabalho/Planilha.xlsx”.

library(openxlsx)
ppbio <- read.xlsx("D:/Elvio/OneDrive/Disciplinas/_EcoNumerica/5.Matrizes/ppbio06.xlsx",
                   rowNames = T,
                   colNames = T,
                   sheet = "Sheet1")
#ppbio

Atente para os resultados dos comandos a seguir.

View(ppbio)
print(ppbio)
#ppbio
str(ppbio)
?str
mode(ppbio)
?mode
class(ppbio)
?class

ppbio_ma <- as.matrix(ppbio) #lê ppbio como uma matriz
str(ppbio_ma)
        ap-davis as-bimac as-fasci ch-bimac ci-ocela ci-orien co-macro co-heter
S-A-ZA1        0        1        0        0        0        0        0        0
S-R-CC1        0       99        0        0        0        0        0        0
S-R-CT1        0      194       55        0        0        5        0        1
S-R-CP1        0       19        0        0        0        0        0        0
S-A-TA1        0       23        1       13        0        0        0        0
S-R-CT2        0      142        3        3        0       69        0        0
S-R-CP2        0        5        1        0       40        9        0        0
S-A-TA2        0       46        0      178        0        0        0        0
S-R-CT3        0      206       64        0        0       25        0        0
S-R-CP3        0       16        0        0       13       24        0        0
S-A-TA3        0      234        7      238        0        0        2        0
S-R-CT4        0        0        1        0        0        5        0        0
S-R-CP4        0        0        0        0       11        6        0        0
S-A-TA4        0      394        0      273        0        0        0        0
B-A-MU1        0       12        0        0        0        0        0        0
B-R-ET1        0        3        0        0        0        0        0        0
B-A-GU1        0        2        2        0        0        0        0        0
B-R-PC2        5       44        0        0        2        0        0        0
B-A-MU2        0       99        0        0        0        0        0        0
B-A-GU2        0        0        0        0        0        0        0        0
B-R-PC3       22       75        7        0        4        0        0        0
B-A-MU3        0      511        0        0        0        0        0        0
B-A-GU3        0        6        0        0        0        0        0        0
B-R-PC4        0        7       17        0        0        0        0        0
B-A-MU4        0      235        0        0        0        0        0        0
B-A-GU4        0       13        0        0        0        0        0        0
        cr-menez cu-lepid cy-gilbe ge-brasi he-margi ho-malab hy-pusar le-melan
S-A-ZA1        0        0        0        0        0        0        0        0
S-R-CC1        0        0        0        0        0        0        0        0
S-R-CT1       14        0        0        3        0        1        9        0
S-R-CP1        0        0        0        0        0        5        2        0
S-A-TA1        0        0        0        0        0        0        0        0
S-R-CT2        4        0        0        0        1       17       43        0
S-R-CP2        0        0        0        0        0       10        2        0
S-A-TA2        0        0        0        0        0        2        0        0
S-R-CT3        8        0        0        1        0       31       11        0
S-R-CP3        0        0        0        0        0        4        0        0
S-A-TA3        0        0        0        0        0       20        0        0
S-R-CT4        1        0       50        3        1        4        3        0
S-R-CP4        0        0        0        0        0        2        0        0
S-A-TA4        1        0        0        1        0        9        0        0
B-A-MU1        0        0        0      190        0        0        0        0
B-R-ET1        0        0        0        0        0        0        0        0
B-A-GU1        0        0        0        7        0        0        0        0
B-R-PC2        0        0        0        8        0        0        0        2
B-A-MU2        0        0        0       67        0        1        0        0
B-A-GU2        0        0        0       23        0        0        0        0
B-R-PC3        0       21        0       16        0        2        1        0
B-A-MU3        0        0        0      145        0        0        0        0
B-A-GU3        0        0        0       32        0        0        0        0
B-R-PC4        0        0       81        5        0        1        0        0
B-A-MU4        0        0        0      509        0        0        0        0
B-A-GU4        0        0        0       10        0        0        0        0
        le-piau le-taeni mo-costa mo-lepid or-nilot pa-manag pimel-sp po-retic
S-A-ZA1       0        0        0        0        0        0        0        0
S-R-CC1       0        0        0        1        2        0        0        0
S-R-CT1       3        0        0       39       36        0        6        0
S-R-CP1       0        0        0        0        0        0        0        0
S-A-TA1       0        0        0        0        0        0        0        0
S-R-CT2       1        0        0        1       77        0        0       20
S-R-CP2       3        0        0        0        0        0        0        0
S-A-TA2       0        0        0        0        0        0        0        0
S-R-CT3       2        0        0        0      138        0        0        5
S-R-CP3       1        0        0        0        0        0        0        0
S-A-TA3       0        0        0        0        0        0        0        0
S-R-CT4       0        0        0        0       73        0        0        0
S-R-CP4       2        0        0        0        0        0        0        0
S-A-TA4       2        0        0        0        1        0        0        0
B-A-MU1       0        0        0        0        6        0        0        0
B-R-ET1       0        0        0        0        8        1        0       34
B-A-GU1       0        0        0        0        3       11        0        0
B-R-PC2       0        1        0        0        5        0        0        0
B-A-MU2       0        0        0        0        1        0        0       10
B-A-GU2       0        0        0        0       36      102        0        0
B-R-PC3       0        0        1        0       65        0        0        0
B-A-MU3       0        0        0        0       11        0        0       46
B-A-GU3       0        0        0        0      247      250        0        0
B-R-PC4       1        0        0        0        9        0        0        0
B-A-MU4       0        0        0        0        1        0        0      266
B-A-GU4       0        0        0        0      129      190        0        0
        po-vivip pr-brevi ps-rhomb ps-genise se-heter se-piaba se-spilo
S-A-ZA1        0        9        0         0        0        0        0
S-R-CC1        0        0        0         0        0        0        0
S-R-CT1       47        5        0         0       40       68        0
S-R-CP1       15        0        0         0       14        0        0
S-A-TA1        0        1        0         0        4        0        0
S-R-CT2      221       15        0         0       60        0        0
S-R-CP2       32        5        0         0        0        0        0
S-A-TA2        0        2        0         0        0        0        0
S-R-CT3      326      164        1         1       38        0        1
S-R-CP3       10        0        0         0        0        0        0
S-A-TA3        0        0        0         0        0        0        0
S-R-CT4       28       59        0         0        3        0        0
S-R-CP4       80        0        0         0        3        0        0
S-A-TA4        0        3        0         0        0        0        0
B-A-MU1        0        0        0         0        0        0        0
B-R-ET1        0        0        0         0        0        0        0
B-A-GU1        0        0        0         0        0        0        0
B-R-PC2        0        9        0         0       10        0        0
B-A-MU2        8        0        0         0        0        0        0
B-A-GU2        0        0        0         0        0        0        0
B-R-PC3        0        6        0         0       93        0        0
B-A-MU3       48        1        0         0        0        0        0
B-A-GU3        0        0        0         0        0        0        0
B-R-PC4        0        0        0         0       31        0        0
B-A-MU4      163        0        0         0        0        0        0
B-A-GU4        0        0        0         0        0        0        0
        st-noton sy-marmo te-chalc tr-signa
S-A-ZA1        0        0        0        0
S-R-CC1        0        0        0        0
S-R-CT1        1        0        0       18
S-R-CP1        0        0        0        0
S-A-TA1        0        0        0        0
S-R-CT2       25        0        0       15
S-R-CP2        0        1        0        0
S-A-TA2        0        0        0        0
S-R-CT3      115        0        0        7
S-R-CP3        0        0        0        0
S-A-TA3        0        0        0        0
S-R-CT4       64        0        0      141
S-R-CP4        0        0        0        0
S-A-TA4        0        0        0        0
B-A-MU1        0        0        0        0
B-R-ET1        0        0        0        0
B-A-GU1        0        0        0        0
B-R-PC2        0        0       76       23
B-A-MU2        0        0        0        0
B-A-GU2        0        0        0        0
B-R-PC3        0        0       58        0
B-A-MU3        0        0        0        0
B-A-GU3        0        0        0        0
B-R-PC4        0        0        0        4
B-A-MU4        0        0        0        0
B-A-GU4        0        0        0        0
'data.frame':   26 obs. of  35 variables:
 $ ap-davis : num  0 0 0 0 0 0 0 0 0 0 ...
 $ as-bimac : num  1 99 194 19 23 142 5 46 206 16 ...
 $ as-fasci : num  0 0 55 0 1 3 1 0 64 0 ...
 $ ch-bimac : num  0 0 0 0 13 3 0 178 0 0 ...
 $ ci-ocela : num  0 0 0 0 0 0 40 0 0 13 ...
 $ ci-orien : num  0 0 5 0 0 69 9 0 25 24 ...
 $ co-macro : num  0 0 0 0 0 0 0 0 0 0 ...
 $ co-heter : num  0 0 1 0 0 0 0 0 0 0 ...
 $ cr-menez : num  0 0 14 0 0 4 0 0 8 0 ...
 $ cu-lepid : num  0 0 0 0 0 0 0 0 0 0 ...
 $ cy-gilbe : num  0 0 0 0 0 0 0 0 0 0 ...
 $ ge-brasi : num  0 0 3 0 0 0 0 0 1 0 ...
 $ he-margi : num  0 0 0 0 0 1 0 0 0 0 ...
 $ ho-malab : num  0 0 1 5 0 17 10 2 31 4 ...
 $ hy-pusar : num  0 0 9 2 0 43 2 0 11 0 ...
 $ le-melan : num  0 0 0 0 0 0 0 0 0 0 ...
 $ le-piau  : num  0 0 3 0 0 1 3 0 2 1 ...
 $ le-taeni : num  0 0 0 0 0 0 0 0 0 0 ...
 $ mo-costa : num  0 0 0 0 0 0 0 0 0 0 ...
 $ mo-lepid : num  0 1 39 0 0 1 0 0 0 0 ...
 $ or-nilot : num  0 2 36 0 0 77 0 0 138 0 ...
 $ pa-manag : num  0 0 0 0 0 0 0 0 0 0 ...
 $ pimel-sp : num  0 0 6 0 0 0 0 0 0 0 ...
 $ po-retic : num  0 0 0 0 0 20 0 0 5 0 ...
 $ po-vivip : num  0 0 47 15 0 221 32 0 326 10 ...
 $ pr-brevi : num  9 0 5 0 1 15 5 2 164 0 ...
 $ ps-rhomb : num  0 0 0 0 0 0 0 0 1 0 ...
 $ ps-genise: num  0 0 0 0 0 0 0 0 1 0 ...
 $ se-heter : num  0 0 40 14 4 60 0 0 38 0 ...
 $ se-piaba : num  0 0 68 0 0 0 0 0 0 0 ...
 $ se-spilo : num  0 0 0 0 0 0 0 0 1 0 ...
 $ st-noton : num  0 0 1 0 0 25 0 0 115 0 ...
 $ sy-marmo : num  0 0 0 0 0 0 1 0 0 0 ...
 $ te-chalc : num  0 0 0 0 0 0 0 0 0 0 ...
 $ tr-signa : num  0 0 18 0 0 15 0 0 7 0 ...
[1] "list"
[1] "data.frame"
 num [1:26, 1:35] 0 0 0 0 0 0 0 0 0 0 ...
 - attr(*, "dimnames")=List of 2
  ..$ : chr [1:26] "S-A-ZA1" "S-R-CC1" "S-R-CT1" "S-R-CP1" ...
  ..$ : chr [1:35] "ap-davis" "as-bimac" "as-fasci" "ch-bimac" ...

4 Referências

R Core Team. 2017. R: A language and environment for statistical computing. Book, R Foundation for Statistical Computing, Austria.
Team, Rs. 2022. RStudio: Integrated Development Environment for R. Book, RStudio, PBC, Boston, MA.

Apêndices

Sites consultados

[https://youtu.be/U6ksXvvY6Q0]
[https://youtu.be/a7EJE_2mtGk]

Notas de rodapé

  1. Curso de Ciências Biológicas do Campus V da UEPB↩︎