Você já viu que qualquer operação ou transformação em R ocorre por meio de um comando, ou seja, por meio de uma função. Também já viu que qualquer a estrutura básica das funções, qual seja, “aqui_uma_funcao(aqui_seus_atributos/insumos)”.
Agora, como há alguns milhares de pacotes em R, as vezes que se propõem a fazer a mesma coisa de modo diferente, ou mesmo atualizam e aperfeiçoam, pequenas variações no nome são comuns. P.ex: col_names, colnames e col.names. E isso é relevante, pois cada função DEVE ter um nome único e você já sabe que há as reserved words. Entretanto, existem sim funções de mesmo nome! O R gera um warning (conflicts) no seu sistema quando percebe que instalou pacotes com funções de mesmo nome.
── Conflicts ─────────────────────────────────── tidyverse_conflicts() ──
✖ dplyr::filter() masks plotly::filter(), stats::filter()
✖ dplyr::lag() masks stats::lag()
Caso estejamos usando dois ou mais pacotes que possuam funções de mesmo nome, a solução é anteceder o nome da função do nome do pacote seguido do símbolo de dois pontos repetido uma vez. Veja:
dplyr::filter()
Ok, precisamos lembrar também que cada função aceita insumo(s) (input) e gera um ou mais produtos produto (output). E, ainda que a função não exija nenhum input, sua estrutura básica exige seu comando ser seguido de parênteses. Por exemplo, a função Sys.Date(), que retorna a data de hoje.
O comando mais utilizado no R é a função help. Não se engane achando que ela só vale para iniciantes! A quantidade de comandos e pacotes é tão grande que se torna impraticável decorar tudo em seus detalhes. Lembre de que existem milhares de pacotes e você mesma(o) poderá fazer um no futuro.
Assim, qualquer objeto do R pode ter seu Vignettes (breve sumário) aberto no painel de output pelo comando help() ou inserindo uma interrogação antes daquilo que deseja conhecer, ex. ?srqt()
O R em sua forma mais básica pode ser uma calculadora, vamos relembrar os operadores matemáticos:
| Operadores | Símbolos | Exemplos |
|---|---|---|
| Adição | + | 5 + 3 = 8 |
| Subtração | - | 5 - 2 = 3 |
| Multiplicação | * | 2 * 3 = 6 |
| Divisão | / | 10 / 5 = 2 |
| Exponenciação | ^ | 2 ^ 3 = 8 |
| Divisão SEM resto | %% | 17 %% 3 = 5 |
* Divisão sem resto: Caso você deseje obter somente o valor de uma divisão desconsiderando os valores decimais, basta usar os símbolos.
Na programação funcional, fazemos maior uso dos Operadores relacionais e lógicos. São extremamente úteis para aritmética e outras hipóteses, sempre retornando um boleano (bolean) TRUE ou FALSE. Uma das melhores capacidade de processamento é verificar se uma proposição é falsa ou verdadeira. Operadores relacionais e lógicos funcionam para aferir se objetos são iguais, diferentes, maiores ou menores; agrupando, incluindo/excluindo ou alternando entre elementos. Vejamos os símbolos na tabela abaixo:
| Operadores | Símbolos |
|---|---|
| estritamente maior | > |
| maior e igual | >= |
| estritamente menor | < |
| menor e igual | <= |
| exatamente igual a | == |
| diferente de | != |
| não é x | !x |
| x OU y | x | y |
| x E y | x & y |
| x está contido em y | x %in% y |
| Não | ! |
Obs. O operador lógico de contido (%in%) em é extramente útil. Ele permite que você verifique se alguma variável apresenta determinado valor em suas observações.
Copie uma linha de cada vez e execute no seu console. Veja os resultados.
# Execute um grupo de comandos de cada vez e veja o resultado.
# Note que há diferença entre executar um comando e guardar seu resultado como um objeto no Global Environment
45 - 13
13 * 3
10 ^ 10
17 %% 3
a <- 45 - 13
b <- 13 * 3
c <- 10 ^ 10
d <- 17 %% 3
f <- a + b - c
pi <- 3.14
escrito <- "meu texto"
verd <- TRUE
# Confira a classe dos objetos que acabou de criar
class(pi)
class(escrito)
class(a)
class(f)
class(verd)
# Operações com vetores e objetos
vetor_numeric <- c(a, c, f, pi, 300, 200, 450.2, 100)
vetor_numeric
class(vetor_numeric)
vetor_string <- c(escrito, "meu texto", )
vetor_string
class(vetor_string)
vetor_logico <- c(T, F, T, F, F)
vetor_logico
class(vetor_logico)
lista_diversa <- c(vetor_logico, vetor_numeric, 200, "vermelho", "dois", 2, "2")
class(lista_diversa)
k <- a > b
class(k)
a == 32
a != 32
isTRUE(a != 32)
# O operador relacional é distinto do operador matemático/símbolo de atribuição
1 = 1
1 == 1
# Podemos usar objetos e números nos cálculos
temp_celsius <- c(-7, -10, 5, 12, 21)
farenheit <- ((temp_celsius / 5) * 9) + 32
farenheit
# Operadores relacionais também vale para textos
"meu texto" == "meu texto"
"meu texto" = "meu texto"
"meu texto" == "Meu texto"
"meu texto" != "Meu texto"
# Objetos string também podem ser ordenados. Lembre-se que os factors são ordenados alfabeticamente por default.
"a" > "b"
"a" < "b"
"A" < "b"
"A" > "a"
# O mesmo vale para palavras ou frases!
"Olga" < "Olga Benário Prestes"
"cores frias" > "cores quentes"
# E os valores boleanos? Dica: Lembre-se do binário.
TRUE == 1
FALSE == 0
TRUE > FALSE
# Comparar objetos a partir dos valores que armazenam
a <- 4
b <- 3
a > b
# Operadores relacionais e vetores
gastos2024 <- c(1020, 800, 990, 345, 203, 3035)
gastos2024 >= 500
# A comparação entre dois vetores
gastos2023 <- c(1000,900,897,458,200,2200)
gastos2023 > gastos2024
# Obs. Os elementos são comparados par a par de acordo com sua posição no vetor. E o vetor resultante tem o mesmo tamanho!
# Operadores relacionais + Lógicos (Booleanos)
# Embora a primeira condição permitisse que o último elemento 2200 fosse TRUE, quando coloco o operador lógico E (&) para uma nova condição: ser diferente de 2200, todos os elementos retornam como FALSE.
gastos2023 > 1000 & gastos2023 !=2200
# O operador lógico "não" reverte uma proposição.
!TRUE
!(4 > 2)
!(gastos2023 > 1000 & gastos2023 <= 300)