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


Exercícios

Seção 4.1

Item a

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:

  1. Iguais a 6
  2. Maiores ou iguais a 6
  3. Menores que 6+2
  4. Não são iguais a 6

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


Item b

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:

  1. Itens menores ou iguais a (6+2)/4
  2. Itens menores ou iguais a (6+2)/4, depois de incrementar cada elemento da array em 2.
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\).


Item c

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


Item d

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


Item e

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

Seção 4.2

Item a

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


Item b

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


Item c

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


Item d

Armazene um terceiro vetor chamado baz que é igual à soma elemento a elemento de foo e bar. Determine:

  • Os elementos de baz maiores ou iguais a 14, mas diferentes de 15;
  • Os elementos que o vetor adquiriu via uma divisão elemento a elemento de 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


Item e

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).


Seção 4.3

Item a

Armazene esse vetor de 10 valores: foo <- c(7,5,6,1,2,10,8,3,8,2). Faça o seguinte:

  1. Extraia os elementos maiores ou iguais a 5 e armazene em bar.
  2. Mostre os elementos restantes de 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


Item b

Use bar de (a)(i) para construir uma matriz 2x3 chamada baz, preenchida por linha. Faça o seguinte:

  1. Substitua qualquer elemento igual a 8 com o quadrado do elemento na linha 1, coluna 2 de baz.
  2. Confirme que todos os valores em 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


Item c

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:

  1. Identifique os índices específicos a cada dimensão das posições dos elementos que são 3 OU 4.
  2. Substitua todos os valores em 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


Seção 4.5


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:

  • Havia 12 homens e 8 mulheres; os indivíduos de número 1, 5-7, 12 e 14-16 eram as mulheres.
  • Os indivíduos de número 1, 4, 12, 15, 16 e 19 se identificavam com o aprtido do Trabalho; ninguém se identificava com Maori; indivíduos 6, 9 e 11 se identificavam com Greens; 10 e 20 se identificavam com other; o resto se identificava como Nacional.


Item a

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')


Item b

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().


Item d

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.


Item e

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


Item f

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.


Seção 5.1

Item a

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)


Item 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