R é um software livre que proporciona um ambiente para análise e visualização de dados. Este artigo proporciona uma breve introdução ao R para alunos matriculados em disciplinas como: Estatística Básica, Introdução à Probabilidade e Estatística ou Estatística Computacional. Conhecimentos básicos de R podem auxiliar bastante o estudo de tais disciplinas. Em geral, qualquer estudante ou profissional interessado em Ciências dos Dados (tais como: Estatística, Mineração de Dados, Aprendizado de Máquina, Reconhecimento de Padrões e Inteligência Computacional) pode achar útil ter conhecimentos de R.
R foi inicialmente desenvolvido por Robert Gentleman e Ross Ihaka, ambos no Departamento de Estatística da Universidade de Auckland, Nova Zelândia. Desde 1997 existe um grupo básico de pessoas interessadas em contribuir com avanços para novas versões do R. Digite contributors()
na frente do prompt R para maiores informações.
Se desejar um material completo sobre R, sugiro duas referências que podem ser úteis: (1) Dalgaard (2002) é um bom livro pra quem deseja iniciar seus estudos sobre R no contexto de Estatística Básica. (2) Para uma referência gratuita, veja Venables, Smith, and The R Core Team (2017) clicando aqui.
Por fim, se entender que a leitura deste artigo foi útil para os seus interesses, bookmark esta página para consulta futura. Para conhecer um pouco mais do meu trabalho, visite minha página web.
R é desenvolvido para diversas plataformas: Windows, Linux e Mac-OS X. Para download R e sua instalação no Windows, basta seguir os seguintes passos:
Procedimentos para instalação do R no Linux e no Mac-OS X também podem ser obtidos na página do Projeto R. Conheça também o RStudio que é um ambiente de desenvolvimento integrado (IDE-Integrated Development Environment) para R. Daqui pra frente vou assumir que o R está instalado no seu computador.
R possui diversos operadores aritméticos para manipular escalares, variáveis e estruturas de dados tais como vetores e matrizes, pra citar apenas dois exemplos.
+ : adição
- : subtração
* : multiplicação
/ : divisão
^ : exponenciação
%/% : divisão inteira
%% : resto de uma divisão
# Exemplos
2+3
## [1] 5
2-3
## [1] -1
2*3
## [1] 6
2/3
## [1] 0.6666667
2^(3)
## [1] 8
25%/%3 # divisão inteira de 25 por 3
## [1] 8
25%%3 # resto de 25/3 (25 mod 3)
## [1] 1
No R o nome de uma variável (ou objeto) pode ser escolhido combinando letras, números e ponto. Nunca inicie com número ou ponto. Para assegurar ou atribuir um valor para uma determinada variável utilize o operador <-
. Para ver o valor atribuído, basta escrever o nome da variável na frente do prompt R e apertar a tecle enter no computador. O símbolo #
deve preceder qualquer comentário que documente seu programa ou script.
<- : atribuição
= : atribuição
# : se desejar comentar uma parte do seu script
pi : número pi
# Exemplos
# Comentário: o comando pi retorna o número pi
pi
## [1] 3.141593
x <- sqrt(2*pi) # armazena em x o valor raiz de pi
x
## [1] 2.506628
x = sqrt(2*pi);x # note que o símbolo = pode ser usado no lugar de <-
## [1] 2.506628
x = x+2
x
## [1] 4.506628
#------------------------------------------------------------------------
#
# MAS <- É EQUIVALENTE A = ? VEREMOS QUE NÃO!!!
#
#------------------------------------------------------------------------
x <- y <- 5
y;x
## [1] 5
## [1] 5
x = y = 5
y;x
## [1] 5
## [1] 5
x = y <- 5
y;x
## [1] 5
## [1] 5
ls() # lista todos os objetos criados
## [1] "x" "y"
rm(x,y) # remove os objetos x e y
y
## Error in eval(expr, envir, enclos): objeto 'y' não encontrado
x
## Error in eval(expr, envir, enclos): objeto 'x' não encontrado
x <- y = 5
## Error in x <- y = 5: objeto 'x' não encontrado
y
## Error in eval(expr, envir, enclos): objeto 'y' não encontrado
x
## Error in eval(expr, envir, enclos): objeto 'x' não encontrado
#------------------------------------------------------------------------
#
# CONCLUSÃO: NOTE QUE <- NÃO É EXATAMENTE O MESMO QUE = !!!
#
#------------------------------------------------------------------------
#
# Ctrl-L limpa o Console
#
#------------------------------------------------------------------------
< : menor que
<= : menor que ou igual a
> : maior que
>= : maior que ou igual a
== : igual
!= : não igual
| : operador OU lógico
& : operador E lógico
! : operador NÃO lógico
A seguir as tabelas verdade para os operadores OU, E e NÃO respectivamente.
A | B | A OU B | A E B | NÃO A |
---|---|---|---|---|
V | V | V | V | F |
V | F | V | F | - |
F | V | V | F | V |
F | F | F | F | - |
# Exemplos
y <- (3==3)|(5>=7)
y
## [1] TRUE
z <- (3>6)&(5==7); z
## [1] FALSE
w <- (3>6)&(5!=7)
w
## [1] FALSE
!w
## [1] TRUE
R possui diversas funções matemáticas já programadas, tais como: , , , , e , etc.
abs() : função módulo
sqrt() : função raiz quadrada
exp() : função exponencial
log() : função log natural
log2() : função log, base 2
log10() : função log, base 10
sin() : função seno
cos() : função cosseno
tan() : função tangente
asin() : função arco seno
acos() : função arco cosseno
atan() : função arco tangente
# Exemplos
abs(-3)
## [1] 3
sqrt(9)
## [1] 3
exp(2)
## [1] 7.389056
log(2); log2(2); log10(2)
## [1] 0.6931472
## [1] 1
## [1] 0.30103
log(2,base=10)
## [1] 0.30103
sin(pi/6); cos(pi/6); tan(pi/6)
## [1] 0.5
## [1] 0.8660254
## [1] 0.5773503
asin(-0.8)
## [1] -0.9272952
acos(0.8)
## [1] 0.6435011
atan(3.2)
## [1] 1.267911
Outros exemplos são como segue:
floor() : função piso
ceiling() : função teto
factorial() : fatorial
min() : função mínimo
max() : função máximo
# Exemplos
floor(pi)
## [1] 3
ceiling(pi)
## [1] 4
factorial(3)
## [1] 6
min(-2,pi,45.3)
## [1] -2
max(-2,pi,45.3)
## [1] 45.3
Estatística e outras Ciências dos Dados trabalham com informações oriundas de unidades experimentais criteriosamente selecionadas conforme planejamentos experimentais ou observacionais que precedem qualquer estudo empírico. Vetores, matrizes, data frames e listas são alguns exemplos de estruturas que podem ser utilizadas para armazenar dados ou informações. Esta seção discute como criar e operar com tais estruturas e discute também maneiras de selecionar parte dos dados armazenados dentro delas.
Um vetor é uma estrutura que pode ser utilizada para armazenar dados. Um vetor é representado no R com o uso da função c()
. Por exemplo, suponha que na sua aplicação de interesse é necessário trabalhar com os vetores e . Para representá-los no R, basta proceder tal como abaixo:
# Exemplo
vec.x <- c(2.34,-1,sqrt(2))
vec.x
## [1] 2.340000 -1.000000 1.414214
vec.y <- c(1,pi,3)
vec.y
## [1] 1.000000 3.141593 3.000000
Agora é possível operar diretamente com os vetores e . Vejamos:
# Exemplos
#
# operações com vetores
#
3*vec.x # multiplicação por escalar
## [1] 7.020000 -3.000000 4.242641
vec.x+vec.y # adição vetorial
## [1] 3.340000 2.141593 4.414214
vec.x*vec.y # multiplicação vetorial componente a componente
## [1] 2.340000 -3.141593 4.242641
vec.x^(3)
## [1] 12.812904 -1.000000 2.828427
sin(vec.y)
## [1] 8.414710e-01 1.224606e-16 1.411200e-01
sum(vec.x) # retorna a soma das componentes do vetor x
## [1] 2.754214
Existem outras funções no R que podem ser utilizadas para criar vetores. Vejamos as funções seq()
e rep()
:
# Exemplos
seq(-2,10) # cria uma sequência iniciando em -2 e terminando em 10 com passo 1
## [1] -2 -1 0 1 2 3 4 5 6 7 8 9 10
-2:10 # note que -2:10 é equivalente a seq(-2,10)
## [1] -2 -1 0 1 2 3 4 5 6 7 8 9 10
# se desejar uma sequência com passo diferente de 1, especifique como um argumento da função seq()
seq(from=-2,to=10,by=2)
## [1] -2 0 2 4 6 8 10
seq(0,1,0.1)
## [1] 0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0
rep(1:3,times=4)
## [1] 1 2 3 1 2 3 1 2 3 1 2 3
rep(1:3,each=4)
## [1] 1 1 1 1 2 2 2 2 3 3 3 3
É possível selecionar os valores de certas componentes de um vetor. Basta usar os possíveis valores para o índice que indexa o vetor. Vejamos os seguintes exemplos:
# Exemplos
vec.w <- 6:15
vec.w
## [1] 6 7 8 9 10 11 12 13 14 15
length(vec.w) # retorna o comprimento do vetor
## [1] 10
vec.w[c(1,3,5,7,9)]
## [1] 6 8 10 12 14
vec.w[-c(1,10)]
## [1] 7 8 9 10 11 12 13 14
Estude também os seguintes exemplos:
# Exemplos
vec.z <- c(3,2,NA,1) # a terceira componente de vec.z possui um valor NA (not available)
vec.z
## [1] 3 2 NA 1
vec.z[3] <- 8 # agora a terceira componente de vec.z possui o valor 8
vec.z
## [1] 3 2 8 1
1:50 # produz uma sequência de 1 até 24 com passo 1
## [1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
## [24] 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
## [47] 47 48 49 50
letters
## [1] "a" "b" "c" "d" "e" "f" "g" "h" "i" "j" "k" "l" "m" "n" "o" "p" "q"
## [18] "r" "s" "t" "u" "v" "w" "x" "y" "z"
LETTERS
## [1] "A" "B" "C" "D" "E" "F" "G" "H" "I" "J" "K" "L" "M" "N" "O" "P" "Q"
## [18] "R" "S" "T" "U" "V" "W" "X" "Y" "Z"
month.name
## [1] "January" "February" "March" "April" "May"
## [6] "June" "July" "August" "September" "October"
## [11] "November" "December"
month.abb
## [1] "Jan" "Feb" "Mar" "Apr" "May" "Jun" "Jul" "Aug" "Sep" "Oct" "Nov"
## [12] "Dec"
c("Maria","Pedro","Paulo","Ana") # um vetor de caracteres
## [1] "Maria" "Pedro" "Paulo" "Ana"
Uma matriz também é uma estrutura que pode ser utilizada para armazenar dados. Uma matriz é representada no R com o uso da função matrix()
. Por exemplo, suponha que seja necessário organizar a sequência 1:24
na forma de uma matriz . Para representá-la no R, basta proceder tal como abaixo:
# Exemplo
mat.A <- matrix(1:24,nrow=4,ncol=6) # organizando os dados por colunas
mat.A
## [,1] [,2] [,3] [,4] [,5] [,6]
## [1,] 1 5 9 13 17 21
## [2,] 2 6 10 14 18 22
## [3,] 3 7 11 15 19 23
## [4,] 4 8 12 16 20 24
mat.B <- matrix(1:24,4,6,byrow=TRUE) # organizando os dados por linhas
mat.B
## [,1] [,2] [,3] [,4] [,5] [,6]
## [1,] 1 2 3 4 5 6
## [2,] 7 8 9 10 11 12
## [3,] 13 14 15 16 17 18
## [4,] 19 20 21 22 23 24
mat.C <- t(mat.A) # retorna a transporta da matriz mat.A
colnames(mat.C) <- c("SP","RJ","MG","ES")
rownames(mat.C) <- c("Jan","Fev","Mar","Abr","Mai", "Jun")
mat.C
## SP RJ MG ES
## Jan 1 2 3 4
## Fev 5 6 7 8
## Mar 9 10 11 12
## Abr 13 14 15 16
## Mai 17 18 19 20
## Jun 21 22 23 24
Tal como no caso de vetores, também é possível selecionar os valores de certas entradas de uma matriz. O procedimento é bem semelhante, basta usar os possíveis valores para os índices e que indexam a matriz. Vejamos os seguintes exemplos:
# Exemplos
mat.D <- matrix(25:48,4,6,byrow=TRUE)
mat.D
## [,1] [,2] [,3] [,4] [,5] [,6]
## [1,] 25 26 27 28 29 30
## [2,] 31 32 33 34 35 36
## [3,] 37 38 39 40 41 42
## [4,] 43 44 45 46 47 48
mat.D[1:3,] # seleciona as 3 primeiras linhas
## [,1] [,2] [,3] [,4] [,5] [,6]
## [1,] 25 26 27 28 29 30
## [2,] 31 32 33 34 35 36
## [3,] 37 38 39 40 41 42
mat.D[,c(4,6)] # seleciona as colunas 4 e 6
## [,1] [,2]
## [1,] 28 30
## [2,] 34 36
## [3,] 40 42
## [4,] 46 48
mat.D[1:3,c(4,6)] # seleciona as entradas das 3 primeiras linhas que se encontram nas colunas 4 e 6
## [,1] [,2]
## [1,] 28 30
## [2,] 34 36
## [3,] 40 42
Estude também os seguintes exemplos:
# Exemplos
mat.A1 <- matrix(c(1,4,-2,5,3,-6),nrow=2,ncol=3)
mat.A1
## [,1] [,2] [,3]
## [1,] 1 -2 3
## [2,] 4 5 -6
mat.A2 <- matrix(c(2,0,3,8,-4,1),nrow=3,ncol=2)
mat.A2
## [,1] [,2]
## [1,] 2 8
## [2,] 0 -4
## [3,] 3 1
#
# operações com matrizes
#
3*mat.A1 # multiplicação por escalar
## [,1] [,2] [,3]
## [1,] 3 -6 9
## [2,] 12 15 -18
mat.A3 <- t(mat.A2) # transporta da matriz mat.A2
mat.A3
## [,1] [,2] [,3]
## [1,] 2 0 3
## [2,] 8 -4 1
mat.A1+mat.A3 # adição matricial
## [,1] [,2] [,3]
## [1,] 3 -2 6
## [2,] 12 1 -5
mat.A1*mat.A3 # multiplicação matricial componente a componente
## [,1] [,2] [,3]
## [1,] 2 0 9
## [2,] 32 -20 -6
mat.A4 <- mat.A1%*%mat.A2 # multiplicação matricial
mat.A4
## [,1] [,2]
## [1,] 11 19
## [2,] -10 6
det(mat.A4) # determinante da matriz quadrada mat.A4
## [1] 256
mat.A5 <- diag(c(2.03,3.14,1.41,-3.47)) # retorna uma matriz diagonal
#------------------------------------------------------------------------
#
# NOTE QUE O R ENTENDE VETORES SEMPRE COMO VETORES COLUNAS!!!
#
#------------------------------------------------------------------------
mat.A6 <- mat.A1%*%c(3,-2,1);mat.A6
## [,1]
## [1,] 10
## [2,] -4
mat.A7 <- c(3,-2,1)%*%mat.A1;mat.A7
## Error in c(3, -2, 1) %*% mat.A1: argumentos não compatíveis
## Error in eval(expr, envir, enclos): objeto 'mat.A7' não encontrado
mat.A8 <- t(c(3,-2))%*%mat.A1;mat.A8
## [,1] [,2] [,3]
## [1,] -5 -16 21
#------------------------------------------------------------------------
Considere o seguinte conjunto de dados ():
ID | Idade | Sexo | Altura | Peso | IMC |
---|---|---|---|---|---|
001 | 26 | M | 1.71 | 70 | 23.94 |
002 | 35 | F | 1.72 | 83 | 28.06 |
003 | 41 | M | 1.83 | 63 | 18.81 |
004 | 28 | M | 1.94 | 77 | 20.46 |
005 | 23 | F | 1.65 | 70 | 25.71 |
006 | 30 | M | 1.68 | 90 | 31.89 |
007 | 48 | F | 1.79 | 89 | 27.78 |
Este conjunto de dados pode ser representado no R com o uso da função data.frame()
. Vejamos o seguinte exemplo:
# Exemplo
id <- 1:7
idade <- c(26,35,41,28,23,30,48)
sexo <- c("M","F","M","M","F","M","F")
altura <- c(1.71,1.72,1.83,1.94,1.65,1.68,1.79)
peso <- c(70,83,63,77,70,90,89)
imc <- peso/(altura^2)
imc.r <- round(imc,2)
df.dados <- data.frame(id,idade,sexo,altura,peso,imc.r)
df.dados
## id idade sexo altura peso imc.r
## 1 1 26 M 1.71 70 23.94
## 2 2 35 F 1.72 83 28.06
## 3 3 41 M 1.83 63 18.81
## 4 4 28 M 1.94 77 20.46
## 5 5 23 F 1.65 70 25.71
## 6 6 30 M 1.68 90 31.89
## 7 7 48 F 1.79 89 27.78
summary(df.dados) # retorna algumas estatísticas para as variáveis do conjunto de dados
## id idade sexo altura peso
## Min. :1.0 Min. :23 F:3 Min. :1.650 Min. :63.00
## 1st Qu.:2.5 1st Qu.:27 M:4 1st Qu.:1.695 1st Qu.:70.00
## Median :4.0 Median :30 Median :1.720 Median :77.00
## Mean :4.0 Mean :33 Mean :1.760 Mean :77.43
## 3rd Qu.:5.5 3rd Qu.:38 3rd Qu.:1.810 3rd Qu.:86.00
## Max. :7.0 Max. :48 Max. :1.940 Max. :90.00
## imc.r
## Min. :18.81
## 1st Qu.:22.20
## Median :25.71
## Mean :25.24
## 3rd Qu.:27.92
## Max. :31.89
dim(df.dados) # retorna a dimensão do conjunto de dados (7 unidades e 6 variáveis)
## [1] 7 6
Alternativamente, é possível usar a função matrix()
.
# Exemplo
id <- 1:7
idade <- c(26,35,41,28,23,30,48)
sexo <- c("M","F","M","M","F","M","F")
sexo
## [1] "M" "F" "M" "M" "F" "M" "F"
sexo.f <- factor(sexo) # converte o vetor de caracteres sexo em fator com 2 níveis
sexo.f
## [1] M F M M F M F
## Levels: F M
altura <- c(1.71,1.72,1.83,1.94,1.65,1.68,1.79)
peso <- c(70,83,63,77,70,90,89)
imc <- peso/(altura^2)
imc.r <- round(imc,2)
mat.dados <- matrix(c(id,idade,sexo.f,altura,peso,imc.r),nrow=7,ncol=6)
rownames(mat.dados) <- 1:7
colnames(mat.dados) <- c("id","idade","sexo","altura","peso","imc.r")
mat.dados
## id idade sexo altura peso imc.r
## 1 1 26 2 1.71 70 23.94
## 2 2 35 1 1.72 83 28.06
## 3 3 41 2 1.83 63 18.81
## 4 4 28 2 1.94 77 20.46
## 5 5 23 1 1.65 70 25.71
## 6 6 30 2 1.68 90 31.89
## 7 7 48 1 1.79 89 27.78
summary(mat.dados) # retorna algumas estatísticas para as variáveis do conjunto de dados
## id idade sexo altura
## Min. :1.0 Min. :23 Min. :1.000 Min. :1.650
## 1st Qu.:2.5 1st Qu.:27 1st Qu.:1.000 1st Qu.:1.695
## Median :4.0 Median :30 Median :2.000 Median :1.720
## Mean :4.0 Mean :33 Mean :1.571 Mean :1.760
## 3rd Qu.:5.5 3rd Qu.:38 3rd Qu.:2.000 3rd Qu.:1.810
## Max. :7.0 Max. :48 Max. :2.000 Max. :1.940
## peso imc.r
## Min. :63.00 Min. :18.81
## 1st Qu.:70.00 1st Qu.:22.20
## Median :77.00 Median :25.71
## Mean :77.43 Mean :25.24
## 3rd Qu.:86.00 3rd Qu.:27.92
## Max. :90.00 Max. :31.89
dim(mat.dados) # retorna a dimensão do conjunto de dados (7 unidades e 6 variáveis)
## [1] 7 6
Vejamos agora como selecionar dados de um data frame:
# Exemplo
id <- 1:7
idade <- c(26,35,41,28,23,30,48)
sexo <- c("M","F","M","M","F","M","F")
altura <- c(1.71,1.72,1.83,1.94,1.65,1.68,1.79)
peso <- c(70,83,63,77,70,90,89)
imc <- peso/(altura^2)
imc.r <- round(imc,2)
df.dados <- data.frame(id,idade,sexo,altura,peso,imc.r)
df.dados
## id idade sexo altura peso imc.r
## 1 1 26 M 1.71 70 23.94
## 2 2 35 F 1.72 83 28.06
## 3 3 41 M 1.83 63 18.81
## 4 4 28 M 1.94 77 20.46
## 5 5 23 F 1.65 70 25.71
## 6 6 30 M 1.68 90 31.89
## 7 7 48 F 1.79 89 27.78
df.dados$sexo;levels(df.dados$sexo)
## [1] M F M M F M F
## Levels: F M
## [1] "F" "M"
df.dados[,c(3,2,4)]
## sexo idade altura
## 1 M 26 1.71
## 2 F 35 1.72
## 3 M 41 1.83
## 4 M 28 1.94
## 5 F 23 1.65
## 6 M 30 1.68
## 7 F 48 1.79
subset(df.dados,select=c("sexo","idade","altura"))
## sexo idade altura
## 1 M 26 1.71
## 2 F 35 1.72
## 3 M 41 1.83
## 4 M 28 1.94
## 5 F 23 1.65
## 6 M 30 1.68
## 7 F 48 1.79
subset(df.dados,subset=(idade>30)&(idade<=41))
## id idade sexo altura peso imc.r
## 2 2 35 F 1.72 83 28.06
## 3 3 41 M 1.83 63 18.81
subset(df.dados,subset=sexo==levels(df.dados$sexo)[1])
## id idade sexo altura peso imc.r
## 2 2 35 F 1.72 83 28.06
## 5 5 23 F 1.65 70 25.71
## 7 7 48 F 1.79 89 27.78
Uma lista é uma estrutura heterogênea para armazenar dados. Vejamos um exemplo simples e também como selecionar dados de uma lista:
# Exemplo
y1 <- 1:3
y2 <- c(1.55,pi,sin(pi/3),82,sqrt(3),exp(1))
y3 <- c("Ana","Maria","Pedro","Paulo")
y4 <- factor(c("F","F","M","M"))
lista.dados <- list(var1=y1,var2=y2,var3=y3,var4=y4)
lista.dados
## $var1
## [1] 1 2 3
##
## $var2
## [1] 1.5500000 3.1415927 0.8660254 82.0000000 1.7320508 2.7182818
##
## $var3
## [1] "Ana" "Maria" "Pedro" "Paulo"
##
## $var4
## [1] F F M M
## Levels: F M
lista.dados$var1
## [1] 1 2 3
lista.dados$var2
## [1] 1.5500000 3.1415927 0.8660254 82.0000000 1.7320508 2.7182818
lista.dados$var3
## [1] "Ana" "Maria" "Pedro" "Paulo"
lista.dados$var4
## [1] F F M M
## Levels: F M
No R é possível definir uma nova função. Suponha que na sua aplicação de interesse existe uma função chamada Retorno que é definida como
# Exemplo
f.retorno <- function(x,par1,par2){
out1 <- (par1)/(1+par2*x^(2))
out2 <- "retorno"
out <- list(valor=out1,alpha.par=par1,beta.par=par2,nome=out2)
return(out)
}
aux <- f.retorno(x=3.4,par1=1,par2=2)
aux
## $valor
## [1] 0.04145937
##
## $alpha.par
## [1] 1
##
## $beta.par
## [1] 2
##
## $nome
## [1] "retorno"
aux$valor
## [1] 0.04145937
aux$alpha.par
## [1] 1
aux$beta.par
## [1] 2
aux$nome
## [1] "retorno"
A função plot()
pode ser usada para fazer gráficos. Vejamos um exemplo simples que apresenta o gráfico da função para .
x <- seq(-5,5,0.1)
y <- x^(2)
plot(x,y,type="l",xlim=c(-6,6),ylim=c(-5,30),xlab="x",ylab="y",col="blue")
abline(h=0);abline(v=0)
Fig.: Gráfico da função .
A função curve()
também pode ser usada para fazer gráficos. Vejamos um exemplo simples que apresenta o plot simultâneo das funções e para .
curve(x^(2)-2,-2,2,xlab="x",ylab="f(x) e g(x)",col="blue")
curve(x^(3)-3*x,-2,2,col="red",add=TRUE)
abline(h=0);abline(v=0)
Fig.: Gráficos simultâneos. (em azul) e (em vermelho).
x <- seq(-5,5,0.5)
y <- x^(2)
par(mfrow=c(2,2))
plot(x,y,type="l",xlim=c(-6,6),ylim=c(-5,30),xlab="x",ylab="y",col="blue");abline(h=0);abline(v=0)
plot(x,y,type="p",xlim=c(-6,6),ylim=c(-5,30),xlab="x",ylab="y",pch=16,col="red");abline(h=0);abline(v=0)
plot(x,y,type="o",xlim=c(-6,6),ylim=c(-5,30),xlab="x",ylab="y",col="green");abline(h=0);abline(v=0)
plot(x,y,type="h",xlim=c(-6,6),ylim=c(-5,30),xlab="x",ylab="y",col="orange");abline(h=0);abline(v=0)
Fig.: Diferentes gráficos da função .
dev.off()
## null device
## 1
R é também uma linguagem de programação, ou seja, é possível desenvolver códigos em R pra resolver problemas. Como qualquer outra linguagem de programação, R possui estruturas de decisão condicional e loops. Vejamos:
if(condição){lista de comandos}
if(condição){lista 1 de comandos} else {lista 2 de comandos}
for(var in seq){lista de comandos}
while(condição){lista de comandos}
repeat{lista de comandos;if(condição){break}}
x <- 1 # x armazena o valor 1
p <- runif(1,0,1) # p recebe um número aleatório entre 0 e 1
p
## [1] 0.7866644
if(p < 1/2){x <- 10}
x
## [1] 1
x <- 0
p <- runif(1,0,1) # p recebe um número aleatório entre 0 e 1
p
## [1] 0.8621572
if(p < 1/3){
x <- 10;print("Ganhou 10")
} else {
x <- -10;print("Perdeu 10")
}
## [1] "Perdeu 10"
x <- NULL
for(i in 1:10){
x[i] <- i*9
print(x)
}
## [1] 9
## [1] 9 18
## [1] 9 18 27
## [1] 9 18 27 36
## [1] 9 18 27 36 45
## [1] 9 18 27 36 45 54
## [1] 9 18 27 36 45 54 63
## [1] 9 18 27 36 45 54 63 72
## [1] 9 18 27 36 45 54 63 72 81
## [1] 9 18 27 36 45 54 63 72 81 90
x
## [1] 9 18 27 36 45 54 63 72 81 90
x <- rep(NA,5)
i <- 1
while(i<6){
x[i] <- i^2
print(x)
i <- i+1
}
## [1] 1 NA NA NA NA
## [1] 1 4 NA NA NA
## [1] 1 4 9 NA NA
## [1] 1 4 9 16 NA
## [1] 1 4 9 16 25
x
## [1] 1 4 9 16 25
x <- NA # x possui um valor não disponível (NA: not available)
is.na(x) # retorna TRUE se x possui um valor NA
## [1] TRUE
i <- 1
while(i<6){
x <- i^2
print(x)
i <- i+1
}
## [1] 1
## [1] 4
## [1] 9
## [1] 16
## [1] 25
x
## [1] 25
is.na(x)
## [1] FALSE
x <- NA
is.na(x)
## [1] TRUE
i <- 1
repeat{
x <- i^2
print(x)
i <- i+1
if(i==6){break}
}
## [1] 1
## [1] 4
## [1] 9
## [1] 16
## [1] 25
x
## [1] 25
is.na(x)
## [1] FALSE
Dalgaard, P. 2002. Introductory Statistics with R. New York, Springer-Verlag.
Venables, W., D. Smith, and The R Core Team. 2017. “An Introduction to R, Version 3.4.1.” R Documentation/Manuals, June. The R Development Core Team, p 1–99. https://cran.r-project.org/manuals.html.