Utilizando a função obrigatorios(), obtém-se os exercícios designados, expostos na tabela a seguir.
| Seção | Página | Exercícios |
|---|---|---|
| 4.1 | 64 | b,d,e |
| 4.2 | 67 | b,c,e |
| 4.3 | 72 | b,c |
| 4.5 | 86 | b,d,f |
| 5.1 | 94 | b |
Armazene o seguinte vetor c(6,9,7,3,6,7,9,6,3,6,6,7,1,9,1) em um objeto e identifique os elementos:
As respostas abaixo indicam os índices do vetor vec que correspondem às condições desejadas.
vec <- c(6,9,7,3,6,7,9,6,3,6,6,7,1,9,1)
#i
which(vec == 6)
## [1] 1 5 8 10 11
#ii
which(vec >=6)
## [1] 1 2 3 5 6 7 8 10 11 12 14
#iii
which(vec < 6+2)
## [1] 1 3 4 5 6 8 9 10 11 12 13 15
#iv
which(vec != 6)
## [1] 2 3 4 6 7 9 12 13 14 15
Crie um novo vetor a partir do criado em a removendo seus primeiros três elementos. Com esse novo vetor, preencha uma array 2x2x3. Examine a matriz de acordo com os critérios a seguir:
arr <- vec[-c(1, 2, 3)] %>%
array(dim = c(2, 2, 3))
#i
arr <= 7
## , , 1
##
## [,1] [,2]
## [1,] TRUE TRUE
## [2,] TRUE FALSE
##
## , , 2
##
## [,1] [,2]
## [1,] TRUE TRUE
## [2,] TRUE TRUE
##
## , , 3
##
## [,1] [,2]
## [1,] TRUE FALSE
## [2,] TRUE TRUE
#ii
(arr+2) <= 7
## , , 1
##
## [,1] [,2]
## [1,] TRUE FALSE
## [2,] FALSE FALSE
##
## , , 2
##
## [,1] [,2]
## [1,] FALSE FALSE
## [2,] TRUE FALSE
##
## , , 3
##
## [,1] [,2]
## [1,] FALSE FALSE
## [2,] TRUE TRUE
Os resultados exibem projeções em \(\mathbb{R}^2\) de objetos em \(\mathbb{R}^3\).
Confirme as localizações específicas dos elementos iguais a zero na matriz identidade 10x10 \(I_{10}\).
O chunk abaixo indica os índices dos elementos da matriz, se disposta como um vetor linha, que correspondem a zero.
which(diag(10) == 0)
## [1] 2 3 4 5 6 7 8 9 10 11 13 14 15 16 17 18 19 20 21 22 24 25 26 27 28
## [26] 29 30 31 32 33 35 36 37 38 39 40 41 42 43 44 46 47 48 49 50 51 52 53 54 55
## [51] 57 58 59 60 61 62 63 64 65 66 68 69 70 71 72 73 74 75 76 77 79 80 81 82 83
## [76] 84 85 86 87 88 90 91 92 93 94 95 96 97 98 99
De forma alternativa, a matriz abaixo indica TRUE onde os elementos são avaliados como verdadeiros quando comparados a 0.
diag(10) == 0
## [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
## [1,] FALSE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [2,] TRUE FALSE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [3,] TRUE TRUE FALSE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [4,] TRUE TRUE TRUE FALSE TRUE TRUE TRUE TRUE TRUE TRUE
## [5,] TRUE TRUE TRUE TRUE FALSE TRUE TRUE TRUE TRUE TRUE
## [6,] TRUE TRUE TRUE TRUE TRUE FALSE TRUE TRUE TRUE TRUE
## [7,] TRUE TRUE TRUE TRUE TRUE TRUE FALSE TRUE TRUE TRUE
## [8,] TRUE TRUE TRUE TRUE TRUE TRUE TRUE FALSE TRUE TRUE
## [9,] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE FALSE TRUE
## [10,] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE FALSE
Verifique se algum dos valores nas arrays lógicas criadas no item b são TRUE. Se sim, verifique se todos são TRUE.
#i
d1 <- arr <= 7
any(d1) #avaliação padrão da função é lógica para TRUE
## [1] TRUE
all(d1)
## [1] FALSE
#ii
d2 <- (arr+2) <= 7
any(d2)
## [1] TRUE
all(d2)
## [1] FALSE
Extraindo os elementos da diagonal da matriz lógica criada em c, use any() para confirmar que não há entradas TRUE
diag_true <- (diag(10) == 0)
#passa o vetor da diagonal à funcão any() de modo vetorizado
diag(diag_true) %>% any()
## [1] FALSE
Armazene o vetor c(7,1,7,10,5,9,10,3,10,8) como foo. Identifique os elementos maiores que 5 ou iguais a 2.
foo <- c(7,1,7,10,5,9,10,3,10,8)
(foo > 5 | foo == 2)
## [1] TRUE FALSE TRUE TRUE FALSE TRUE TRUE FALSE TRUE TRUE
Armazene o vetor c(8,8,4,4,5,1,5,6,6,8) como bar e identifique os elementos menores ou iguais a 6 e diferentes de 4.
bar <- c(8,8,4,4,5,1,5,6,6,8)
(bar <= 6 & bar != 4)
## [1] FALSE FALSE FALSE FALSE TRUE TRUE TRUE TRUE TRUE FALSE
Identifique os elementos que satisfazem a em foo e satisfazem b em bar.
foo[which(foo > 5 | foo == 2)]
## [1] 7 7 10 9 10 10 8
bar[which(bar <= 6 & bar != 4)]
## [1] 5 1 5 6 6
Armazene um terceiro vetor chamado baz que é igual à soma elemento a elemento de foo e bar. Determine:
baz maiores ou iguais a 14, mas diferentes de 15;baz por foo que são maiores que 4 ou menores ou iguais a 2.baz <- foo+bar
#i
baz[which(baz >= 14 & baz != 15)]
## [1] 14 16 16
#ii
(baz/foo)[which(baz/foo > 4 | baz/foo <= 2)]
## [1] 9.000000 1.571429 1.400000 2.000000 1.111111 1.500000 1.600000 2.000000
Confirme que usando as formas longas dos operadores nos vetores dos exercícios anteriores resulta apenas na primeira comparação (isto é, os resultados correspondem apenas às primeiras entradas dos vetores dos itens anteriores)
#a
(foo > 5 || foo == 2)
## [1] TRUE
#b
(bar <= 6 && bar != 4)
## [1] FALSE
#c
foo[which(foo > 5 || foo == 2)]
## [1] 7
bar[which(bar <= 6 && bar != 4)]
## numeric(0)
#d
baz[which(baz >= 14 && baz != 15)]
## numeric(0)
(baz/foo)[which(baz/foo > 4 || baz/foo <= 2)]
## numeric(0)
Para os três últimos itens, não houve resultado, de modo que a operação imprime numeric(0).
Armazene esse vetor de 10 valores: foo <- c(7,5,6,1,2,10,8,3,8,2). Faça o seguinte:
bar.foo após remover aqueles maiores ou iguais a 5.foo <- c(7,5,6,1,2,10,8,3,8,2)
bar <- foo[foo >=5]
bar
## [1] 7 5 6 10 8 8
foo[foo < 5]
## [1] 1 2 3 2
Use bar de (a)(i) para construir uma matriz 2x3 chamada baz, preenchida por linha. Faça o seguinte:
baz.baz agora são menores ou iguais a 25 E maiores que 4.baz <- matrix(bar, byrow = T, nrow = 2)
#i
baz[which(baz == 8)] <- baz[1, 2]^2
#ii
all(baz <= 25 & baz > 4)
## [1] TRUE
Crie uma array 3x2x3 chamada qux usando o seguinte vetor de 18 valores: c(10,5,1,4,7,4,3,3,1,3,4,3,1,7,8,3,7,3). Faça o seguinte:
qux que são menores que 3 OU maiores ou iguais a 7 pelo valor 100.arr <- array(c(10,5,1,4,7,4,3,3,1,3,4,3,1,7,8,3,7,3), dim = c(3, 2, 3))
#i
which(arr == 3 | arr == 4,arr.ind=T)
## dim1 dim2 dim3
## [1,] 1 2 1
## [2,] 3 2 1
## [3,] 1 1 2
## [4,] 2 1 2
## [5,] 1 2 2
## [6,] 2 2 2
## [7,] 3 2 2
## [8,] 1 2 3
## [9,] 3 2 3
#ii
arr[which(arr < 3 | arr >= 7)] <- 100
arr
## , , 1
##
## [,1] [,2]
## [1,] 100 4
## [2,] 5 100
## [3,] 100 4
##
## , , 2
##
## [,1] [,2]
## [1,] 3 3
## [2,] 3 4
## [3,] 100 3
##
## , , 3
##
## [,1] [,2]
## [1,] 100 3
## [2,] 100 100
## [3,] 100 3
O governo da Nova Zelândia consiste de partidos políticos: Nacional, do Trabalho, Greens e Maori, com diversos partidos menores categorizados como other. Suponha que você tenha perguntado a 20 neozelandeses com qual eles se identificam mais e tenha obtido os seguintes dados:
Use seu conhecimento sobre vetores para criar dois vetores de caracteres: sexo com entradas “M” (masculino) e “F” (feminino) e partido com entradas “Nacional”, “Trabalho”, “Greens”, “Maori” e “Other”.
sexo <- c('F','M','M','M','F','F','F','M','M','M','M','F','M','F','F','F','M','M','M','M')
partido <- c('T','N','N','T','N','G','N','N','G','O','G','T','N','N','T','T','N','N','T','O')
Crie dois vetores de fator diferentes baseados em sexo e partido. Faz algum sentido atribuir ordered=TRUE em algum dos casos? Como R parece ter ordenado os níveis?
sexo <- factor(sexo, levels = c('M', 'F'), labels = c('Masculino', 'Feminino'))
partido <- factor(partido, levels = c('N', 'T', 'G', 'M', 'O'), labels = c("Nacional", "Trabalho", "Greens", "Maori", "Other"))
R parece ter ordenado os níveis dos fatores em ordem alfabética. Como são duas variáveis categóricas e não ordinais, não faz sentido passar o argumento ordered=TRUE em factor().
Outras seis pessoas se juntaram ao survey, com os resultados c("Nacional","Maori","Maori","Trabalho","Greens","Trabalho") para partido e c("M","M","F","F","F","M") para gênero. Combine esses resultados com os fatores originais de (b).
novos <-factor(c("N","M","M","T","G","T"),levels = c('N', 'T', 'G', 'M', 'O'))
part2 <- factor(c(partido,novos), labels = c("Nacional", "Trabalho", "Greens", "Maori", "Other"))
Suponha que você também tenha perguntado a todos os indivíduos sobre sua confiança de que o partido do Trabalho venceria mais assentos no parlamento do que o partido Nacional nas próximas eleções e desse uma parcentagem subgetiva para a confiança. Os 26 resultados foram obtidos: 93, 55, 29, 100, 52, 84, 56, 0, 33, 52, 35, 53, 55, 46, 40, 40, 56, 45, 64, 31, 10, 29, 40, 95, 18, 61.
Crie um fator com níveis de confiança conforme o seguinte: baixo para percentagens [0,30], moderado para (30,70] e alto para percentagens (70,100].
conf <- c(93, 55, 29, 100, 52, 84, 56, 0, 33, 52, 35, 53, 55, 46, 40, 40, 56, 45, 64, 31, 10, 29, 40, 95, 18, 61)
conf_fac <- cut(conf, breaks = c(0, 30, 70, 100), include.lowest = TRUE, labels = c('baixo', 'moderado', 'alto'))
conf_fac
## [1] alto moderado baixo alto moderado alto moderado baixo
## [9] moderado moderado moderado moderado moderado moderado moderado moderado
## [17] moderado moderado moderado moderado baixo baixo moderado alto
## [25] baixo moderado
## Levels: baixo moderado alto
De (e), extraia os níveis correspondentes àqueles indivíduos que originalmentedisseram que se identificavam com o partido do Trabalho e com o partido Nacional. O que você percebe?
conf_fac[which(part2 == 'Trabalho')]
## [1] alto alto moderado moderado moderado moderado alto moderado
## Levels: baixo moderado alto
conf_fac[which(part2 == 'Nacional')]
## [1] moderado baixo moderado moderado baixo moderado moderado moderado
## [9] moderado baixo
## Levels: baixo moderado alto
Aqueles que preferem o partido do Trabalho parecem tender a estimar como maior a possibilidade de obterem mais assentos no parlamento.
Crie uma lista que contenha, nesta ordem: uma sequencia de 20 numeros igualmente espaçados entre -4 e 4; uma matriz 3x3 do vetor c(F,T,T,T,F,T,T,F,F) preenchida por coluna; o vetor de caracteres com os strings “don” e “quixote”; um vetor fator contendo as observações c("LOW","MED","LOW","MED","MED","HIGH").
lista <- list(
num = c(seq(from = -4, to = 4, by = 8/19)),
mat = matrix(c(F,T,T,T,F,T,T,F,F), ncol = 3),
char = c("don", "quixote"),
fac = factor(c("LOW","MED","LOW","MED","MED","HIGH"))
)
lista
## $num
## [1] -4.0000000 -3.5789474 -3.1578947 -2.7368421 -2.3157895 -1.8947368
## [7] -1.4736842 -1.0526316 -0.6315789 -0.2105263 0.2105263 0.6315789
## [13] 1.0526316 1.4736842 1.8947368 2.3157895 2.7368421 3.1578947
## [19] 3.5789474 4.0000000
##
## $mat
## [,1] [,2] [,3]
## [1,] FALSE TRUE TRUE
## [2,] TRUE FALSE FALSE
## [3,] TRUE TRUE FALSE
##
## $char
## [1] "don" "quixote"
##
## $fac
## [1] LOW MED LOW MED MED HIGH
## Levels: HIGH LOW MED
Essa matriz é usada no item obrigatório (b)
Cire uma nova lista com o fator vetor de (a) como a componente chamada “fac”; o vetor numérico c(3,2.1,3.3,4,1.5,4.9) como a componente chamada “nums”; e uma lista aninhada composta pelos primeiros três membros da lista de (a) (usando o slicing de listas) chamada “oldlist”. Depois, faça o seguinte:
i.Extraia os elementos de facs que corespondem a elementos de nums que são maiores ou iguais a 3.
ii. Adicione um novo membro à lista chamado “flags”. Esse membro deve ser um vetor lógico de compirmento 6, obtido como uma repetição dupla da terceira coluna da matriz lógica do componente oldlist. iii. Use “flags” e o operador lógico de negação ! para extrair as entradas de num que correspondem a FALSE. iv. Sobrescreva o vetor de caracteres da componente de oldlist com um único string “Don Quixote”.
lista_b <- list(
fac = lista$fac,
nums = c(3,2.1,3.3,4,1.5,4.9),
oldlist = lista[c(1:3)]
)
lista_b
## $fac
## [1] LOW MED LOW MED MED HIGH
## Levels: HIGH LOW MED
##
## $nums
## [1] 3.0 2.1 3.3 4.0 1.5 4.9
##
## $oldlist
## $oldlist$num
## [1] -4.0000000 -3.5789474 -3.1578947 -2.7368421 -2.3157895 -1.8947368
## [7] -1.4736842 -1.0526316 -0.6315789 -0.2105263 0.2105263 0.6315789
## [13] 1.0526316 1.4736842 1.8947368 2.3157895 2.7368421 3.1578947
## [19] 3.5789474 4.0000000
##
## $oldlist$mat
## [,1] [,2] [,3]
## [1,] FALSE TRUE TRUE
## [2,] TRUE FALSE FALSE
## [3,] TRUE TRUE FALSE
##
## $oldlist$char
## [1] "don" "quixote"
#i
lista_b$fac[lista_b$nums>=3]
## [1] LOW LOW MED HIGH
## Levels: HIGH LOW MED
#ii
lista_b$flags <- rep(lista_b$oldlist$mat[,3], 2)
lista_b$flags
## [1] TRUE FALSE FALSE TRUE FALSE FALSE
#iii
lista_b$nums[!rep(lista_b$oldlist$mat[,3], 2)] #com a negação, F vira T e assim selecionamos
## [1] 2.1 3.3 1.5 4.9
#iv
lista_b[[3]][[3]] <- "Don Quixote"
lista_b$oldlist$char
## [1] "Don Quixote"
A lista final é a seguinte:
lista_b
## $fac
## [1] LOW MED LOW MED MED HIGH
## Levels: HIGH LOW MED
##
## $nums
## [1] 3.0 2.1 3.3 4.0 1.5 4.9
##
## $oldlist
## $oldlist$num
## [1] -4.0000000 -3.5789474 -3.1578947 -2.7368421 -2.3157895 -1.8947368
## [7] -1.4736842 -1.0526316 -0.6315789 -0.2105263 0.2105263 0.6315789
## [13] 1.0526316 1.4736842 1.8947368 2.3157895 2.7368421 3.1578947
## [19] 3.5789474 4.0000000
##
## $oldlist$mat
## [,1] [,2] [,3]
## [1,] FALSE TRUE TRUE
## [2,] TRUE FALSE FALSE
## [3,] TRUE TRUE FALSE
##
## $oldlist$char
## [1] "Don Quixote"
##
##
## $flags
## [1] TRUE FALSE FALSE TRUE FALSE FALSE