2 + 4[1] 6
2 * 4[1] 8
2 - 4[1] -2
2^4[1] 16
R é um ambiente de software livre para computação estatística e gráfica que roda em uma variedade de plataformas UNIX, Windows e MacOS (R Project). A instalação pode ser feita a partir do site oficial CRAN, seguindo as instruções para cada plataforma. O RStudio é uma Interface de Desenvolvimento Integrado (IDE) dedicada ao ambiente R, embora existam outras opções como Jupyter Notebook, Jupyter Lab, Visual Studio Code e Google Colab.
Vamos iniciar nossa introdução ao R com seu uso mais simples, um ambiente para cálculos aritméticos. Como você verá, o R usa os operadores matemáticos de subtração (-), adição (+), multiplicação (*), divisão (/) e potenciação (^) do modo análogo a outros softwares.
Além destes, temos operadores para extrairmos a parte inteira (%%) e o resto (%/%) de uma divisão.
O uso de parênteses também permite o controle das operações matemáticas seguindo as prioridades conhecidas nestas operações. Por exemplo, a expressão:
é diferente de:
Assim como a expressão:
é diferente de:
Existem também funções aritméticas comuns como \(log(x)\), \(\sqrt(x)\), \(\sin(x)\), o número \(\pi\), etc.
O R se estrutura por meio de objetos. Ao atribuir um valor a uma variável, esta se torna um objeto que fica disponível na memória. Para atribuir valor \(2\) à variável x fazemos:
Após atribuir um valor à variável, esta fica disponível na memória da seção atual e pode ser utilizada em operações subsequentes.
Ao atribuir outro valor à mesma variável, o valor inicial é substituído:
O R diferencia caracteres minúsculos de MAIÚSCULOS. Portanto:
Os objetos em R podem ser vetores (numéricos, alfanuméricos ou fatores), matrizes (numéricas ou alfanumétricas), data frames (estrutura bidimensional que pode combinar colunas de diferentes tipos como vetores numéricos, alfanuméricos ou fatores) ou listas (que pode combinar em sua estrutura, todos os objetos descritos acima). As funções em R são sequências de comandos que podem transformar objetos.
Os objetos podem guardar mais de um único valor. A função concatenar c() pode ser utilizada para criar um vetor com múltiplos valores. Dizemos que cada valor individual é uma entrada.
Podemos utilizar estes vetores em nossas operações.
Note que na operação acima, cada entrada foi multiplicada por \(2\).
Podemos ainda acessar e modificar entradas individuais. Por exemplo, o objeto y criado acima tem 5 elementos. O segundo elemento pode ser acessado com o comando:
E alterado com o comando:
Se quisermos excluir o quarto elemento de y e gravar o resultado em um novo objeto z fazemos:
Obs: Veja que o quarto elemento, 18, foi excluído.
Podemos obter a informação sobre o número de elementro do vetor. O vetor y tem tamanho igual a 5, enquanto o vetor z tem 4 elementos.
Podemos criar sequencias regulares.
[1] 2 3 4 5 6 7 8 9 10
[1] 2 4 6 8 10
[1] 2.000000 4.666667 7.333333 10.000000
[1] 2.000000 2.888889 3.777778 4.666667 5.555556 6.444444 7.333333
[8] 8.222222 9.111111 10.000000
E repetições de valores e vetores.
[1] 4 4 4 4 4 4
[1] 2 5 2 5 2 5
[1] 2 2 2 5 5 5
Os resultados destas sequências podem ser guardadas em um objeto para utilização subsequente.
São vetores em que cada entrada é um caracter alfanumerico.
[1] "Deuterodon iguape" "Characidium japuhybense"
[3] "Trichomycterus zonatus"
Existe uma variedade de funções para manipulação de vetores alfanuméricos.
A função sort() por exemplo, aplicada a um vetor numérico é utilizada para ordená-lo de forma crescente:
ou decrescente:
Se aplicada a um vetor alfanumerico esta função ordena o vetor em ordem alfabética:
pasteSuponha que desejamos unir dois vetores alfanuméricos
O mesmo resultado pode ser obtido de forma mais concisa com o comando:
Fatores são como vetores alfanuméricos, porém com um atributo adicional. Fatores são compostos por diferentes níveis. Por exemplo, podemos criar o objeto dosagem com o comando:
[1] "Alta" "Alta" "Alta" "Media" "Media" "Media" "Baixa" "Baixa" "Baixa"
No exemplo acima, o R não reconhece as palavras Alta, Media e Baixa como diferentes níveis. Para isto devemos transformá-lo em um fator:
[1] Alta Alta Alta Media Media Media Baixa Baixa Baixa
Levels: Alta Baixa Media
O objeto dosagem agora é um fator com 3 níveis.
Note entretanto que os níveis foram reconhecidos em ordem alfabética. Se quisermos ordenar este níveis de outro modo fazemos:
[1] Alta Alta Alta Media Media Media Baixa Baixa Baixa
Levels: Baixa < Media < Alta
Como veremos a frente, esta operação facilita a visualização gráfica de fatores ordenados.
Matrizes são objetos compostos por linhas e colunas. No R, uma matriz pode ser construída inicialmente criando um vetor numérico:
Em seguida o vetor pode ser organizado em uma matriz definindo-se o número de linhas e de colunas que sejam compatíveis com o tamanho do vetor. No exemplo acima o vetor tem comprimento 12 e pode ser organizado em uma matriz de \(3\) linhas e \(4\) colunas:
[,1] [,2] [,3] [,4]
[1,] 21 18 20 14
[2,] 26 17 15 27
[3,] 5 28 13 22
Note que os elementos foram adicionados um por vez de coluna em coluna. Se quisermos preencher a matriz por linhas adicionamos ao comando, o argumento byrow = TRUE.
[,1] [,2] [,3] [,4]
[1,] 21 26 5 18
[2,] 17 28 20 15
[3,] 13 14 27 22
Os elementos de uma matriz podem ser acessados indicando sua posição na linha e na coluna. Por exemplo, o elemento da \(2^a\) linha e \(3^a\) coluna de x pode ser acessados pelo comando:
De modo análogo, a \(2^a\) linha pode ser acessada por:
E a \(4^a\) coluna por:
Valores individuais em matrizes podem ser alterados de forma similar ao que é realizasdo em vetores. Por exemplo, para alterar o elemento da \(2^a\) linha e \(3^a\) coluna de x por \(1000\) fazemos:
Também podemos excluir linhas e colunas de uma matriz.
[,1] [,2] [,3] [,4]
[1,] 21 26 5 18
[2,] 13 14 27 22
[,1] [,2] [,3]
[1,] 21 26 18
[2,] 17 28 15
[3,] 13 14 22
Note que, acima, não salvamos os resultados da exclusão das linhas e colunas de x em nenhum objeto, de modo que x continua inalterado.
Podemos criar matrizes unindo vetores de tamanho iguais em linhas ou colunas.
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
x 3 4 5 6 7 8 9 10 11 12
y 12 11 10 9 8 7 6 5 4 3
x y
[1,] 3 12
[2,] 4 11
[3,] 5 10
[4,] 6 9
[5,] 7 8
[6,] 8 7
[7,] 9 6
[8,] 10 5
[9,] 11 4
[10,] 12 3
Eventualmente, se desejarmos atribuir nomes às linhas e às colunas de uma matriz, podemos fazê-lo por meio das funções rownames() e colnames() respectivamente:
[,1] [,2] [,3] [,4]
[1,] 1 4 7 10
[2,] 2 5 8 11
[3,] 3 6 9 12
[,1] [,2] [,3] [,4]
Linha1 1 4 7 10
Linha2 2 5 8 11
Linha3 3 6 9 12
Coluna1 Coluna2 Coluna3 Coluna4
Linha1 1 4 7 10
Linha2 2 5 8 11
Linha3 3 6 9 12
Assim como Matrizes, Data frames são estruturas que permitem organizar dados em formato de linhas e colunas. No R entanto, as Matrizes não podem guardar objetos de diferentes características. Por exemplo, uma matriz pode ser composta inteiramente numérica:
Ou alfanumérica:
[,1] [,2] [,3]
[1,] "a" "e" "i"
[2,] "b" "f" "j"
[3,] "c" "g" "k"
[4,] "d" "h" "l"
Porém, se tentarmos unir um vetor numérico a um vetor alfanumérico, toda a matriz será convertida no formato alfanumérico.
[1] "C" "D" "E" "F" "G" "H" "I" "J" "K" "L"
x z
[1,] "3" "C"
[2,] "4" "D"
[3,] "5" "E"
[4,] "6" "F"
[5,] "7" "G"
[6,] "8" "H"
[7,] "9" "I"
[8,] "10" "J"
[9,] "11" "K"
[10,] "12" "L"
Para unir diferentes tipos de vetores devemos usar transformar a matriaz para um objeto do tipo data.frame que cria uma estrutura com colunas independentes, permitindo que estas tenham diferentes formatos. Podemos unir os objetos x e z acima em um data frame como segue:
Note que automaticamente, a função atribui nomes as colunas (x e z) e às linhas (\(1\) a 10). Estes nomes podem ser alterados com as funções rownames() e colnames().
Neste caso, a coluna x continua sendo numérica e a coluna z continua alfanumérica.
Podemos acessar os elementos de um data frame do mesmo modo que fizemos para matrizes.
Podemos criar um data frame diretamente:
E acessá-lo de diferentes formas:
Regiao Especie_A Especie_B
1 Santos 12 0
2 Santos 43 59
3 Bertioga 80 300
4 Bertioga 91 350
5 Peruibe 75 154
6 Peruibe 115 200
[1] Santos Santos Bertioga Bertioga Peruibe Peruibe
Levels: Bertioga Peruibe Santos
Regiao
1 Santos
2 Santos
3 Bertioga
4 Bertioga
5 Peruibe
6 Peruibe
[1] Santos Santos Bertioga Bertioga Peruibe Peruibe
Levels: Bertioga Peruibe Santos
Especie_A Especie_B
1 12 0
2 43 59
3 80 300
4 91 350
5 75 154
6 115 200
Combinam em um único objeto todas as estruturas anteriores. Veja o exemplo em que combinamos um vetor alfanumérico, um vetor nominal e um data frame dentro da mesma lista.
$Ilha
[1] "Ilhabela" "Anchieta" "Cardoso"
$Areaskm2
[1] 347.5 8.3 131.0
$Localizacao
Bioma Lat Long
1 Mata Atlantica 23 45
2 Mata Atlantica 25 47
3 Mata Atlantica 23 45
Podemos ainda inserir listas dentro de outras listas, criando estruturas altamente complexas.
Para acessar os elementos de uma lista podemos identificar seu nome após o operador $ ou sua posição das formas que se seguem:
[1] "Ilhabela" "Anchieta" "Cardoso"
[1] "Ilhabela" "Anchieta" "Cardoso"
Bioma Lat Long
1 Mata Atlantica 23 45
2 Mata Atlantica 25 47
3 Mata Atlantica 23 45
Bioma Lat Long
1 Mata Atlantica 23 45
2 Mata Atlantica 25 47
3 Mata Atlantica 23 45
Operadores relacionais são aqueles de verificam as relações de menor que (<), maior que (>), menor ou igual (<=), maior ou igual (>=), igual a (==) ou diferente de (!=). O resultado de uma comparação retorna um objeto com o argumento verdadeiro (TRUE) ou falso (FALSE). Veja por exemplo:
Se os objetos têm mais de um elemento, no caso de vetores, matrizes ou data frames, a comparação é feita elemento-a-elemento, comparando aqueles que estão na mesma posição, ou seja, os que têm o mesmo índice de posição.
Os operadores TRUE e FALSE, quanto utilizados em operações aritméticas se comportam respectivamente como valores 1 e 0.
Somando os elementos de y temos o número de elementos que atendendem à condição acima:
E se tirarmos a média aritmética, teremos a proporção de 1’s no vetor y.
Lembre-se que ao compararmos vetores de tamanhos distintos, o R não retorna um erro, mas recicla os elementos do vetor menor para compensar elementos faltantes.
Operadores lógicos são os de NEGAÇÃO (!), E lógico, OU lógico versão vetorizada (|) e OU exclusivo (xor()). Exemplos destes operadores são: