Última atualização: 12 de maio, 2025 às 20:38.
## e) e f)
39-4^2)/(5*6)
(# [1] 0.7666667
39-4^2)/5 * 6
(# [1] 27.6
## g)
exp(-2) * 2^3/factorial(3)
# [1] 0.180447
exp(-2 + 3*log(2) - sum(log(1:3)))
# [1] 0.180447
dpois(3, lambda=2)
# [1] 0.180447
## h)
1 - (20/20)*(19/20)*(18/20)*(17/20)*(16/20)
# [1] 0.4186
1 - factorial(20)/(factorial(15)*20^5)
# [1] 0.4186
1 - prod((20:16)/20)
# [1] 0.4186
1 - exp(sum(log(16:20)) - 5*log(20))
# [1] 0.4186
A função c()
pode ser uasada para definir um vetor como ilustrado a seguir.
Por exemplo, para criar o vetor \(X = (3, 2.5, 1.2, 5, 8)\) fazemos:
c(3, 2.5, 1.2, 5, 8)
X <-
X# [1] 3.0 2.5 1.2 5.0 8.0
Além disto certos vetores possuem um “padrão” e pode ser criados de forma mais conveniente usando recursos como :
, seq()
e rep()
. Examine os exemplos a seguir.
0:10
# [1] 0 1 2 3 4 5 6 7 8 9 10
8:12
# [1] 8 9 10 11 12
15:7
# [1] 15 14 13 12 11 10 9 8 7
##
seq(0, 10, by = 1)
# [1] 0 1 2 3 4 5 6 7 8 9 10
seq(0, 10, by = 2)
# [1] 0 2 4 6 8 10
seq(0, 10, length = 4)
# [1] 0.000000 3.333333 6.666667 10.000000
##
rep(1:3, times = 2)
# [1] 1 2 3 1 2 3
rep(1:3, each = 2)
# [1] 1 1 2 2 3 3
rep(1:3, 2)
# [1] 1 2 3 1 2 3
1 1 1 2 2 2 3 3 3 4 4 4 5 5 5
1 2 3 1 2 3 1 2 3 1 2 3 1 2 3
1 2 3 4 5 6 7 8 9 10 1 2 3 4 5 6 7 8 9 10
0.5 1.5 2.5 3.5 4.5 5.5 6.5 7.5
-3 -2 -1 0 1 2 3
10 10 15 15 15 15 15 13 13 13
1 2 2 3 3 3 4 4 4 4 5 5 5 5 5
10 10 10 10 10 9 9 9 9 8 8 8 7 7
Dica: rep()
e seq()
12 14 16 11 12 18 15 12 15
3 7 11 15 19 23
1 2 4 7 11 16 22 29 37 46 56 67
c(12, 14, 16, 11, 12, 18, 15, 12, 15))
(v.a <-# [1] 12 14 16 11 12 18 15 12 15
seq(3, 23, by=4))
(v.b <-# [1] 3 7 11 15 19 23
3 + (0:5)*4
# [1] 3 7 11 15 19 23
unique(v.a)
# [1] 12 14 16 11 18 15
length(unique(v.a))
# [1] 6
##
> 13
v.a # [1] FALSE TRUE TRUE FALSE FALSE TRUE TRUE FALSE TRUE
> 13]
v.a[v.a # [1] 14 16 18 15 15
subset(v.a, v.a > 13)
# [1] 14 16 18 15 15
sum(v.a > 13)
# [1] 5
mean(v.a > 13)
# [1] 0.5555556
##
table(v.a)
tb.a <-names(tb.a)[which.max(tb.a)]
# [1] "12"
Nos exercícios desta sessão considere escrever códigos utilizando estruturas de controle for, while e/ou repeat.
Considere uma aplicação financeira com aportes mensais de R$ 100,00, juros de 0,3% ao mês.
100
deposito <- 0.003
taxa <- 1L
mes <- numeric(12))
(saldo <-# [1] 0 0 0 0 0 0 0 0 0 0 0 0
##
1] <- deposito
saldo[for(i in 2:12)
(1+taxa)*saldo[i-1] + deposito
saldo[i] <-
saldo# [1] 100.0000 200.3000 300.9009 401.8036 503.0090 604.5180 706.3316
# [8] 808.4506 910.8759 1013.6086 1116.6494 1219.9993
##
numeric(1))
(saldo <-# [1] 0
0L
mes <-while(saldo < 2000){
(1+taxa)*saldo + deposito
saldo <- mes+1L
mes <-cat("mes ", mes,":", saldo, "\n")
}# mes 1 : 100
# mes 2 : 200.3
# mes 3 : 300.9009
# mes 4 : 401.8036
# mes 5 : 503.009
# mes 6 : 604.518
# mes 7 : 706.3316
# mes 8 : 808.4506
# mes 9 : 910.8759
# mes 10 : 1013.609
# mes 11 : 1116.649
# mes 12 : 1219.999
# mes 13 : 1323.659
# mes 14 : 1427.63
# mes 15 : 1531.913
# mes 16 : 1636.509
# mes 17 : 1741.418
# mes 18 : 1846.643
# mes 19 : 1952.183
# mes 20 : 2058.039
c(mes, saldo)
# [1] 20.000 2058.039
##
numeric(1))
(saldo <-# [1] 0
0L
mes <-repeat{
(1+taxa)*saldo + deposito
saldo <- mes+1
mes <-cat("mes ", mes,":", saldo, "\n")
if(saldo >= 2000)
break
}# mes 1 : 100
# mes 2 : 200.3
# mes 3 : 300.9009
# mes 4 : 401.8036
# mes 5 : 503.009
# mes 6 : 604.518
# mes 7 : 706.3316
# mes 8 : 808.4506
# mes 9 : 910.8759
# mes 10 : 1013.609
# mes 11 : 1116.649
# mes 12 : 1219.999
# mes 13 : 1323.659
# mes 14 : 1427.63
# mes 15 : 1531.913
# mes 16 : 1636.509
# mes 17 : 1741.418
# mes 18 : 1846.643
# mes 19 : 1952.183
# mes 20 : 2058.039
c(mes, saldo)
# [1] 20.000 2058.039
##
cat(sprintf("O saldo de %.2f foi atingido no mês %d. \n", round(saldo), mes))
# O saldo de 2058.00 foi atingido no mês 20.
rm(mes, deposito,taxa)
É uma sequencia de números \((F_0, F_1, F_2, \ldots, F_n)\) em que \(F_0 = 0, F_1 = 1\), \(F_2 = 1\) e \(F_k = F_{k-2} + F_{k-1}\).
Escreva comandos para:
function(lado){
tri.f1 <-list("altura" = lado * sqrt(3)/2,
"area" = lado^2 * sqrt(3)/4,
"raioC" = lado * sqrt(3)/3)
}tri.f1(10)
# $altura
# [1] 8.660254
#
# $area
# [1] 43.30127
#
# $raioC
# [1] 5.773503
## três formas da rodar para diferentes valores do lado:
tri.f1(1:3))
(res1 <-# $altura
# [1] 0.8660254 1.7320508 2.5980762
#
# $area
# [1] 0.4330127 1.7320508 3.8971143
#
# $raioC
# [1] 0.5773503 1.1547005 1.7320508
lapply(1:3, tri.f1))
(res2 <-# [[1]]
# [[1]]$altura
# [1] 0.8660254
#
# [[1]]$area
# [1] 0.4330127
#
# [[1]]$raioC
# [1] 0.5773503
#
#
# [[2]]
# [[2]]$altura
# [1] 1.732051
#
# [[2]]$area
# [1] 1.732051
#
# [[2]]$raioC
# [1] 1.154701
#
#
# [[3]]
# [[3]]$altura
# [1] 2.598076
#
# [[3]]$area
# [1] 3.897114
#
# [[3]]$raioC
# [1] 1.732051
sapply(1:3, tri.f1))
(res3 <-# [,1] [,2] [,3]
# altura 0.8660254 1.732051 2.598076
# area 0.4330127 1.732051 3.897114
# raioC 0.5773503 1.154701 1.732051
## e para retirar a área em cada uma delas:
$area
res1# [1] 0.4330127 1.7320508 3.8971143
1]]$area
res2[[# [1] 0.4330127
sapply(res2, function(x) x$area)
# [1] 0.4330127 1.7320508 3.8971143
2,]
res3[# [[1]]
# [1] 0.4330127
#
# [[2]]
# [1] 1.732051
#
# [[3]]
# [1] 3.897114
Um exemplo clássico para mostrar que a intuição pode ser uma “má conselheira” quando calculamos probabilidades é o problema dos aniversários.
O problema em calcular a probabilidade de haver alguma uma coincidência de aniversário em um grupo de pessoas.
Escreva uma função em R que permita resolver ambos: achar a probabilidade para um grupo de pessoas ou achar o número de pessoas para uma certa probabilidade. Faça também o gráfico desta função.
Retorne ao problema da aplicação financeira e escreva uma função adequada ao problema que permite escolher a taxa de juros e calcule o ganho após certo tempo ou o tempo para certo ganho.
Revisite o problema da sequência de Fibonacci e escreva una função adequada para gerar valores ou sequências.
function(n){
fib <- n
n1 <- max(n)
n <- c(0,rep(1, n-1))
f <-if(n>=3){
for(i in 3:n){
f[i-1]+f[i-2]
f[i] =
}
}return(f[n1])
}fib(15)
# [1] 377
fib(16)
# [1] 610
fib(10)
# [1] 34
fib(1:10) ## ineficiente por repetir operações para cada valor
# [1] 0 1 1 2 3 5 8 13 21 34
fib(4:8)
# [1] 2 3 5 8 13
fib(c(2, 4, 8, 10))
# [1] 1 2 13 34
##
## Definindo uma função recursiva
function(n){
fib.rec <-if(n == 0) return(NULL)
if(n == 1) return(0)
if(n == 2) return(1)
fib.rec(n-2) + fib.rec(n-1)
}fib.rec(10)
# [1] 34
sapply(1:10, fib.rec)
# [1] 0 1 1 2 3 5 8 13 21 34
Vectorize(fib.rec)
fib.recV <-fib.recV(1:10)
# [1] 0 1 1 2 3 5 8 13 21 34
fib.recV(4:8)
# [1] 2 3 5 8 13
fib.recV(c(2, 4, 8, 10))
# [1] 1 2 13 34