Introdução rápida ao R-lang

Introdução rápida ao R-lang

Guia rápido com tudo que precisa saber ao iniciar na linguagem R

Instalação

Aqui fiz um artigo sobre a instalação do R no Linux: Menos de 3 minutos e estará pronto

R console/CLI

Basta digitar R

Para sair do console do R, use o quit(), irá perguntar se deseja salvar Save workspace image? [y/n/c]:

Print

Declarando o valor 10 para a variavel a e depois imprimindo no output:

a <- 10 #também podemos usar `a = 10`, mas depois explico!
print(a)

[1] 10

Dados

O R classifica todos os dados com base em 5 tipos diferentes:

  1. Double
  2. Integer
  3. Character
  4. Logical
  5. Complex

Double

O Double é como o float no python, qualquer número inteiro ou decimal é um Double e ele é o modo default para qualquer número armazenado (no caso do print(a) acima, por exemplo)

Integer

O integer, inteiro. por definição matemática literal, inteiro é um número inteiro (sem frações ou pontos decimais). Todos os inteiros são indicados por "L" após o número.

No nosso primeiro exemplo (lembre-se que é um Double por default!), vamos usa-lo como inteiro:

 a <- 10L
print(a)

[1] 10

Show?! Complicando um pouco:

 x=17.53L
Warning message:
integer literal 17.53L contains decimal; using numeric value 

 print(x)
[1] 17.53

O que houve?

x é uma fração, mas estamos tentando armazená-la como um Integer adicionando um L após 17.53. R entende e converte para Double para evitar perda de dados.

Se armazenarmos um valor de fração dentro de um Integer, o R armazenará automaticamente o valor como um Double para evitar qualquer perda de dados.

Character

São nossas strings. Para usa-los, basta armazenar entre aspas. O R diferencia maiúscula e minúscula.

Logical

Logical são os famosos booleanos, True (T) ou False (F)

Complex

Complex são números que possuem uma combinação de números reais + imaginários. Ex.: 3+3i

Declarando variáveis

Usa-se os operadores ( ->, <- e = ) para declarar as variaveis.

> alias = 1753
> alias <- 1753
> 1753 -> alias
> print(alias)
[1] 1753

> teste=1
> print(teste)
[1] 1

> teste<-2
> print(teste)
[1] 2

> 3->teste
> print(teste)
[1] 3

Operadores

Os operadores na programação R são categorizados em 5 categorias diferentes:

  • Operadores aritméticos

adição +

subtração -

divisão /

multiplicação *

exponencial ^

a = 20
b = 10
c = a+b
d = a/b
e = a*b
f = a-b
g = a%%b
h = a%/%b

print(c)
print(d)
print(e)
print(f)
print(g)
print(h)
  • Operadores Relacionais

Este mostrará o resultado em booleano, True ou False.

Menor que <

Maior que >

Igual a ==

Diferente de !=

Menor que igual a <=

Maior que igual a >=

a<b
a>b
a==b
a!=b
a<=b
a>=b
  • Operadores lógicos

& - Operador AND

| (pipe)- Operador OR

!- Operador NOT

AND &: O operador AND significa verificar ambos os valores. Se algum deles for FALSE, retornará como FALSE.

OR |: O operador OR significa verificar qualquer um dos valores. Se algum deles for TRUE, ele retornará como TRUE.

NOT !: O operador NOT apenas retornaria o oposto do valor. Se o valor for TRUE, retornará FALSE e vice-versa.

> a = 20
b = 0

a&b
a|b
!a
[1] FALSE
[1] TRUE
[1] FALSE
>

No caso da operação &, tanto a como b devem ser diferentes de zero. Portanto, a saída é FALSE.

No caso da operação ‘|, apenas um deve ser Diferente de Zero. Portanto, a saída é TRUE.

No caso da operação !, a saída será o oposto do seu valor. Portanto, a saída é FALSE.

Não podemos executar o tipo AND & em data types Double ou Character.

  • Operadores de Atribuição

Atribuição à esquerda: <-, <<- e =

Atribuição à Direita: -> e ->>

  • Operadores Especiais

Sequência :

Procurar valor no vetor %any%

Funções

Procedures ou rotinas são chamadas de functions.

Há 2 tipos:

  • Built-in functions

Já armazenadas em memória, como a print() por exemplo.

Outros exemplos de functions built-in:

function sum() soma:

# sum function
sum(a,b)

# Ou
print(a+b)

# Ou
c = a+b
print(c)

function sqrt() raiz quadrada:

> sqrt(16)
[1] 4

function typeof() retorna qual o tipo de dado está na variavel:

> a = 10
> typeof(a)

[1] "double"
  • Custom functions

As custom functions, são criadas pelo seu código.

Estrutura da criação de uma function:

   FunctionName <- Function(arguments){
       Statements....
       ....
   }

Exemplo BEM simples:

Criando uma função que multiplica ao quadrado o numero dado:

  aoquadrado <- function(a){
  NumeroAoQuadrado <- a * a
  print(NumeroAoQuadrado)
}

aoquadrado(32)
[1] 1024

IF-ELSE Conditions

      if(condition){
        if statements to be executed....
      }
      else{
        else statements to be executed....
      }

Loops

while

Irá retornar a mensagem, adicionar 1 ao contador e repetir enquanto o contador for menor que 100.

count <- 1

while(count < 100) {
  print(count, "print this again")
  count <- count + 1
}

Irá retornar a mensagem juntamente com o valor do contador, depois, adicionar 1 ao contador e repetir enquanto o contador for menor ou igual a 100.

Neste caso, para imprimir o valor do contador junto com a mensagem, ou seja, Double + Character (inteiro e string), usaremos a function paste:

count <- 1

while(count <= 100) {
  print(paste(count, "print this again"))
  count <- count + 1
}

for

Retorna todos os nomes da coluna Names. a função c() retorna um vetor (um array unidimensional).

Names <- c("Manuel","Floriano","Prudente","Manoel","Francisco","Afonso","Nilo", "Hermes")

for(i in Names){
  print(i)
}

Loop for com sequência: (de 1 a 10):

for(i in 1:10){ 
  print(i) 
  }

Vector

Vector são como uma lista, mas armazenam apenas valores do mesmo tipo de dados!

No R, todos os valores variáveis são guardados em Vectores.

Assim, quando temos a = 1, o R armazena como um Vector com valor 1 e tamanho 1.

Agora, quando temos x = 1 2 3 4, o R armazena como um Vector x com os valores 1 2 3 4 e tamanho 4 (lembre-se: este é um tipo Double, não há aspas duplas para ser um Character e não há L no final para ser um Inteiro).

V1 <- c("Manuel","Floriano","Prudente","Manoel")

V2 <- c(1,2,3,4,5)
# Ou
V2 = 1:5

Para exibir apenas uma posição no vector:

print(V1[3])
[1] "Prudente"

Usando a function seq():

 seq(1,20) # gera uma sequência de 1 a 20
 [1]  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20

 seq(1,20,2) # gera uma sequencia de 1 a 20 em saltos de 2
 [1]  1  3  5  7  9 11 13 15 17 19

 V3 = seq(1,20,2) # Cria um vetor com o resultado da fuction seq()

> print(V3)
 [1]  1  3  5  7  9 11 13 15 17 19

Usando a function rep():

rep(3,5)
[1] 3 3 3 3 3

V1 = rep(3,5)

print(V1)
[1] 3 3 3 3 3
V1 = rep("a",5)

print(V1)
[1] "a" "a" "a" "a" "a"

Podemos adicionar, subtrair, dividir ou multiplicar diretamente com os vectores.

v1 = c(8,7,5,3,6)
v2 = c(4,7,1,0,9)

add.vector = v1+v2
print(add.vector)
[1] 12 14  6  3 15

subtract.vector = v1-v2
print(subtract.vector)
[1]  4  0  4  3 -3

multiply.vector = v1*v2
print(multiply.vector)
[1] 32 49  5  0 54

divide.vector = v1/v2
print(divide.vector)
[1] 2.0000000 1.0000000 5.0000000       Inf 0.6666667

Baseados na posição do vetor:

v1 = c( 8 , 7 , 5 , 3 , 6 )
        |   |   |   |   |
v2 = c( 4 , 7 , 1 , 0 , 9 )

Se o segundo vetor tiver menos dados, o R irá repetir a sequência, veja no exemplo abaixo:

v1 = c(8,7,5,3,6,7)
v2 = c(4,7)

add.vector = v1+v2
print(add.vector)
[1] 12 14  9 10 10 14

subtract.vector = v1-v2
print(subtract.vector)
[1]  4  0  1 -4  2  0

multiply.vector = v1*v2
print(multiply.vector)
[1] 32 49 20 21 24 49

divide.vector = v1/v2
print(divide.vector)
[1] 2.0000000 1.0000000 1.2500000 0.4285714 1.5000000 1.0000000

Ou seja, v1 = c(8,7,5,3,6,7) manterá, mas o v2 = c(4,7) será repetido, virando v2 = c(4,7,4,7,4,7)

Matrix

Os vetores são um grupo de elementos de um único tipo de dados e que representam os dados numa única dimensão.

Isto significa que terá "1 linha e n colunas" que podem ser escritas como (1,n)

A matriz é semelhante a um Vector mas é bidimensional , contém 'm linhas e n colunas' que podem ser escritas como (m,n).

A matriz é definida como um grupo de elementos semelhantes dispostos em duas dimensões.

INDEXAMENTO é como podemos acessar cada elemento de uma Matriz.

A matriz é feita usando uma combinação de números de linhas e números de colunas dentro de colchetes, por exemplo: [linha1,col3]

Matrix pode ser criada usando 3 functions: matrix() # matrix function rbind() # Row function cbind() # Column function

Exemplo:

vector com 20 valores:

vec = c(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20)

Matrix com 4 linhas e 5 colunas e os valores do vector vec.

vec = c(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20)

M1 = matrix(vec,4,5)

print(M1)
     [,1] [,2] [,3] [,4] [,5]
[1,]    1    5    9   13   17
[2,]    2    6   10   14   18
[3,]    3    7   11   15   19
[4,]    4    8   12   16   20

Ou, de outra forma:

M2 = matrix(c(1:20),4,5)
print(M2)

Ou, criando uma Matrix com diversos vetores:

v1 = c(1,5,9,13,17)
v2 = c(2,6,10,14,18)
v3 = c(3,7,11,15,19)
v4 = c(4,8,12,16,20)

M3 = rbind(v1,v2,v3,v4)

print(M3)
   [,1] [,2] [,3] [,4] [,5]
v1    1    5    9   13   17
v2    2    6   10   14   18
v3    3    7   11   15   19
v4    4    8   12   16   20

Criando um Vector usando posições diferentes de diversas Matrix, usando o rbind para a mesma quantidade de itens na linha.

Isto irá criar um Vector de 3 linhas e 4 colunas com os 12 valores presentes nos 3 Vetores.

M4 = rbind(c(1:4),c(5:8),c(9:12))

print(M4)
     [,1] [,2] [,3] [,4]
[1,]    1    2    3    4
[2,]    5    6    7    8
[3,]    9   10   11   12

Criando um Vector usando posições diferentes de diversas Matrix, usando o cbind para o mesmo tamanho de coluna.

Isto irá criar um Vector de 5 linhas e 4 colunas com os 20 valores presentes nos 4 Vetores.

M5 = cbind(v1,v2,v3,v4)

print(M5)
     v1 v2 v3 v4
[1,]  1  2  3  4
[2,]  5  6  7  8
[3,]  9 10 11 12
[4,] 13 14 15 16
[5,] 17 18 19 20

Data frames

Com o Data Frame, podemos armazenar qualquer tipo de valor/dados.

Estrutura:

DataFrame_Name = data.frame(
   col1_name = col1_values,
   tcol2_name = col2_values,
   coln_name = coln_values
   )

Chamando o Data frame como function:

data.frame()

Vamos criar um Data Frame com 4 colunas: ID, Nome, Idade e Departamento, com 5 valores presentes.

List = data.frame(ID = 101:105,
           Nome = c("Mike","Henry","Tom","Harvey","Rachel"),
           Idade = c(21,22,21,20,22),
           Department = c("IT","EX","EX","CS","IT")
)

print(List)

   ID   Nome Idade Department
1 101   Mike    21         IT
2 102  Henry    22         EX
3 103    Tom    21         EX
4 104 Harvey    20         CS
5 105 Rachel    22         IT

List

Listas são algo em que podemos armazenar Valores, Vetores, Matrizes e Data Frame, todos juntos num único arquivo.

Dentro da função, podemos adicionar qualquer número de Vetores, Matrizes ou Data Frames, assim como podemos declarar Variáveis únicas.

Usa-se a function list()

Como:

List_Name = list(vectorName1, MatrixName1, DataFrameName1, vectorName2,...)

Um exemplo:

#Data Frame
DataFrame1 = data.frame(ID = 101:105,
           Nome = c("Mike","Henry","Tom","Harvey","Rachel"),
           Idade = c(21,22,21,20,22),
           Department = c("IT","EX","EX","CS","IT")
)

#Vector
V<- 1:4;

#Matrix
M <- matrix(1:16,4,4)

#variable
Num <- 4

#Uma lista com todos:
List = list(V, M, Num, DataFrame1)

# exibindo a lista:


print(List)

[[1]]
[1] 1 2 3 4

[[2]]
     [,1] [,2] [,3] [,4]
[1,]    1    5    9   13
[2,]    2    6   10   14
[3,]    3    7   11   15
[4,]    4    8   12   16

[[3]]
[1] 4

[[4]]
   ID   Nome Idade Department
1 101   Mike    21         IT
2 102  Henry    22         EX
3 103    Tom    21         EX
4 104 Harvey    20         CS
5 105 Rachel    22         IT

Packages

Os pacotes são extensões do R. Os pacotes contêm código, dados e documentação em um formato de coleção padronizado.

O CRAN é o repositório padrão onde ficam os packages, semelhante ao que é o Pip para o Python, Cpan para o Perl...

  • Vamos testar o package ggplot2.

ggplot2 é um sistema para criar gráficos declarativamente, baseado na gramática dos gráficos. Você fornece os dados, informa ao ggplot2 como mapear variáveis ​​para estética, quais primitivas gráficas usar e ele cuida dos detalhes.

Instalar o package:

install.packages("ggplot2")

Após (demora um pouco!), vamos carregar o package no nosso ambiente atual:

library(ggplot2)

Por fim, executa-lo com um exemplo simples (da própria doc):

ggplot(mpg, aes(displ, hwy, colour = class)) + geom_point()

Resultado: image.png

Aqui a documentação completa deste package:

rdocumentation.org/packages/ggplot2/version..

Um Cheatsheet do ggplot2:

github.com/rstudio/cheatsheets/blob/main/da..

Pagina oficial do ggplot2:

ggplot2.tidyverse.org

  • Outro package, o txtplot:

No console do R:

install.packages('txtplot')

O txtplot é uma biblioteca que gera gráficos ASCII, incluindo gráficos de dispersão, plotagem de linhas, plotagem de densidade, acf e gráficos de barras.

Depois de instalado, podemos carrega-lo e rodar a chamada abaixo para gerar um exemplo:

>  library('txtplot')

> txtplot(cars[,1], cars[,2], xlab = "velocidade", ylab = "distancia")
      +----+-----------+------------+-----------+-----------+--+
  120 +                                                   *    +
      |                                                        |
d 100 +                                                   *    +
i     |                                    *                *  |
s  80 +                          *         *                   +
t     |                                       * *    *    *    |
a  60 +                          *  *      *    *      *       +
n     |                        *         * *  * *              |
c  40 +                *       * *    *  *    * *              +
i     |         *      *  * *  * *  *                          |
a  20 +           *    *  * *       *                          +
      |  *      *    *                                         |
    0 +----+-----------+------------+-----------+-----------+--+
           5          10           15          20          25   
                             velocidade                         
>

Rstudio, VSCode e Terminal

Todos os exemplos aqui foram feitos via RStudio, vscode (com as extensões R) e no terminal do Linux.

image.png

image.png

image.png

Links

RDocumentation (pesquisa a documentação dos packages e functions): rdocumentation.org

Did you find this article valuable?

Support Esli Silva by becoming a sponsor. Any amount is appreciated!