Utilizando a função obrigatorios(), obtém-se os exercícios designados, expostos na tabela a seguir.
| Seção | Página | Exercícios |
|---|---|---|
| 2.3 | 27 | b,d,e |
| 2.4 | 33 | b,c,d,h |
| 2.5 | 36 | b,c |
| 3.1 | 45 | b,d,f |
| 3.2 | 52 | a,b |
Uma sequência de valores de 5 a -11, gerada com incrementos de 0.3 pode ser obtida da seguinte forma:
a <- seq(from = 5, to = -11, by = -.3)
a
## [1] 5.0 4.7 4.4 4.1 3.8 3.5 3.2 2.9 2.6 2.3 2.0 1.7
## [13] 1.4 1.1 0.8 0.5 0.2 -0.1 -0.4 -0.7 -1.0 -1.3 -1.6 -1.9
## [25] -2.2 -2.5 -2.8 -3.1 -3.4 -3.7 -4.0 -4.3 -4.6 -4.9 -5.2 -5.5
## [37] -5.8 -6.1 -6.4 -6.7 -7.0 -7.3 -7.6 -7.9 -8.2 -8.5 -8.8 -9.1
## [49] -9.4 -9.7 -10.0 -10.3 -10.6 -10.9
Cabe notar que o incremento deve ter o sinal negativo para que a sequência seja gerada, isto é, não há uma conversão automática mediante apenas a indicação da direção da sequência.
A seguir o objeto a é reescrito, invertendo a direção da sequência:
a <- seq(-11, 5, .3)
a
## [1] -11.0 -10.7 -10.4 -10.1 -9.8 -9.5 -9.2 -8.9 -8.6 -8.3 -8.0 -7.7
## [13] -7.4 -7.1 -6.8 -6.5 -6.2 -5.9 -5.6 -5.3 -5.0 -4.7 -4.4 -4.1
## [25] -3.8 -3.5 -3.2 -2.9 -2.6 -2.3 -2.0 -1.7 -1.4 -1.1 -0.8 -0.5
## [37] -0.2 0.1 0.4 0.7 1.0 1.3 1.6 1.9 2.2 2.5 2.8 3.1
## [49] 3.4 3.7 4.0 4.3 4.6 4.9
Assim como ocorre no item a, o valor final da sequencia gerada não inclui o valor final inserido na função, já que não é possível fazer uma divisão em intervalos sem resto.
O vetor c(-1,3,-5,7,-9) é repetido duas vezes, com cada elemento sendo gerado 10 vezes. Seus resultados, armazenados no objeto item_c é ordenado de maneira decrescente. O operador %>% é usado como forma de melhorar a legibilidade.
item_c <- rep(c(-1,3,-5,7,-9), times = 2, each = 10) %>% sort()
item_c
## [1] -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -5 -5 -5 -5 -5
## [26] -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
## [51] -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
## [76] 3 3 3 3 3 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7
É criado um vetor que contenha:
i <- seq(6, 12, by = 1)
ii <- rep(5.3, 3)
iii <- -3
iv <- seq(102, length(item_c), by = -(102 - length(item_c))/8)
vec <- c(i, ii, iii, iv)
vec
## [1] 6.00 7.00 8.00 9.00 10.00 11.00 12.00 5.30 5.30 5.30
## [11] -3.00 102.00 101.75 101.50 101.25 101.00 100.75 100.50 100.25 100.00
Por fim, confirmamos que o comprimento do vetor criado no item anterior tem valor 20.
length(vec)
## [1] 20
Criar um vetor que contenha os itens seguintes, em ordem:
c(2,-5.1,-33)i <- seq(3, 6, by = 3/4)
ii <- rep(c(2,-5.1,-33), 2)
iii <- 2+(7/42)
vec <- c(i, ii, iii)
vec
## [1] 3.000000 3.750000 4.500000 5.250000 6.000000 2.000000
## [7] -5.100000 -33.000000 2.000000 -5.100000 -33.000000 2.166667
São extraídos o primeiro e o último elementos de vec e armazenados em um novo objeto.
vec2 <- vec[c(1, length(vec))]
vec2
## [1] 3.000000 2.166667
um terceiro objeto é obtido do item a, omitindo aqueles obtidos no item b.
vec3 <- vec[-c(1, length(vec))]
vec3
## [1] 3.75 4.50 5.25 6.00 2.00 -5.10 -33.00 2.00 -5.10 -33.00
vec é reconstruído usando os objetos criados nos itens b e c.
newvec <- c(vec2[1], vec3, vec2[2])
newvec
## [1] 3.000000 3.750000 4.500000 5.250000 6.000000 2.000000
## [7] -5.100000 -33.000000 2.000000 -5.100000 -33.000000 2.166667
vec é reescrito com os mesmos valores, mas em ordem crescente.
vec <- sort(vec)
vec
## [1] -33.000000 -33.000000 -5.100000 -5.100000 2.000000 2.000000
## [7] 2.166667 3.000000 3.750000 4.500000 5.250000 6.000000
usando o operador :, a ordem de vecé invertinda, confirmando que se trata dad mesma operação que sort(vec, decreasing = TRUE)
vec[12:1]
## [1] 6.000000 5.250000 4.500000 3.750000 3.000000 2.166667
## [7] 2.000000 2.000000 -5.100000 -5.100000 -33.000000 -33.000000
sort(vec, decreasing = TRUE)
## [1] 6.000000 5.250000 4.500000 3.750000 3.000000 2.166667
## [7] 2.000000 2.000000 -5.100000 -5.100000 -33.000000 -33.000000
É criado um vetor vec3 a partir do item c que repete o terceiro elemento três vezes, quatro vezes o sexto elemento e o último elemento uma vez.
vecg <- c(rep(vec3[3], 3), rep(vec3[6], 4), vec3[length(vec3)])
vecg
## [1] 5.25 5.25 5.25 -5.10 -5.10 -5.10 -5.10 -33.00
É criado um vetor como uma cópia do gerado no item e e, na cópia, sobrescreva o primeiro, quinto a sétimo e o último elemento pelos números de [99, 95] respectivamente.
num <- seq(99, 95, by = -1)
copia <- vec
copia[c(1, 5, 6, 7, length(copia))] <- num
copia
## [1] 99.00 -33.00 -5.10 -5.10 98.00 97.00 96.00 3.00 3.75 4.50
## [11] 5.25 95.00
Converta o vetor c(2,0.5,1,2,0.5,1,2,0.5,1) em um vetor de apenas 1s, usando um vetor de comprimento 3.
vec <- c(2,0.5,1,2,0.5,1,2,0.5,1)
vec[1:9] <- c(1,1,1)
vec
## [1] 1 1 1 1 1 1 1 1 1
Usando o comportamento vetorizado em R, converta as temperaturas 45, 77, 20, 19, 101, 120 e 212 em Fahrenheit para graus Celsius.
temp <- c(45, 77, 20, 19, 101, 120, 212)
(temp-32)*5/9
## [1] 7.222222 25.000000 -6.666667 -7.222222 38.333333 48.888889 100.000000
Use o vetor c(2, 4, 6) e o vetor c(1, 2) em conjunção com rep e * para produzir o vetor c(2, 4, 6, 4, 8, 12).
c1 <- c(2, 4, 6)
c2 <- c(1, 2)
c1*rep(c2, 1, each = 3)
## [1] 2 4 6 4 8 12
bdf
Construa e armazene uma matriz 4x2 preenchida, linha a linha, pelos valores 4.3, 3.1, 8.2, 8.2, 3.2, 0.9, 1.6, e 6.5, nesta ordem.
mat <- matrix(data = c(4.3, 3.1, 8.2, 8.2, 3.2, 0.9, 1.6, 6.5), nrow = 4, ncol = 2, byrow = TRUE)
mat
## [,1] [,2]
## [1,] 4.3 3.1
## [2,] 8.2 8.2
## [3,] 3.2 0.9
## [4,] 1.6 6.5
Confirme que as dimensões da matriz anterior são 3x2 se for removida qualquer linha.
dim(mat)
## [1] 4 2
mat[-1,] %>% dim()
## [1] 3 2
A função dim() evidencia que a matriz tem dimensões 4x2 e, se removida uma linha, se reduz a 3x2.
Sobrescreva a segunda coluna da matriz do item a pela mesma coluna, mas organizada de forma crescente.
mat2 <- mat
mat2[,1] <- sort(mat2[,1])
mat2
## [,1] [,2]
## [1,] 1.6 3.1
## [2,] 3.2 8.2
## [3,] 4.3 0.9
## [4,] 8.2 6.5
Ao se apagar a quarta linha e a primeira coluna da matriz do item c, em formato de matriz, se obtem o seguinte:
mat2[-4, -1] %>% as.matrix()
## [,1]
## [1,] 3.1
## [2,] 8.2
## [3,] 0.9
Os quatro itens inferiores da matriz do item c são armazenados em um objeto.
mat3 <- mat2[-c(1, 2),]
mat3
## [,1] [,2]
## [1,] 4.3 0.9
## [2,] 8.2 6.5
Sobrescreva, nesta ordem, os elementos de c nas posições (4;2), (1;2), (4;1), e (1;1) com \(-\frac{1}{2}\) dos dois valores da diagonal da matriz do item e.
diag <- c(diag(mat3))*(-1)/2
mat2[c(4, 1), c(2,2,1,1)] <- diag
mat2
## [,1] [,2]
## [1,] -3.25 -3.25
## [2,] 3.20 8.20
## [3,] 4.30 0.90
## [4,] -2.15 -2.15
Calcule:
\[ \frac{2}{7} \left( \left[ \begin{matrix} 1 & 2 \\ 2 & 4 \\ 7 & 6 \end{matrix} \right] - \left[ \begin{matrix} 10 & 20 \\ 30 & 40 \\ 50 & 60 \end{matrix} \right] \right) \]
mat1 <- matrix(c(1, 2, 2, 4, 7, 6), ncol = 2, byrow = TRUE)
mat2 <- matrix(c(10,20,30,40,50,60), ncol = 2, byrow = TRUE)
(mat1-mat2)*2/7
## [,1] [,2]
## [1,] -2.571429 -5.142857
## [2,] -8.000000 -10.285714
## [3,] -12.285714 -15.428571
Considerando as matrizes:
\[ A = \left[ \begin{matrix} 1 \\ 2 \\ 7 \end{matrix} \right] B = \left[ \begin{matrix} 3 \\ 4 \\ 8 \end{matrix} \right] \]
é possível realizar as operações:
a <- matrix(c(1, 2, 7), byrow = FALSE)
b <- matrix(c(3, 4, 8), byrow = FALSE)
t(a)%*%b
## [,1]
## [1,] 67
t(b)%*%(a%*%t(a))
## [,1] [,2] [,3]
## [1,] 67 134 469
((b%*%t(b))+(a%*%t(a)) -100*diag(3)) %>% inv()
## [,1] [,2] [,3]
## [1,] -0.00792368 0.00312327 0.00784333
## [2,] 0.00312327 -0.00535024 0.01148381
## [3,] 0.00784333 0.01148381 0.01758474