Pular para o conteúdo principal

Questão de Programação — R — FGV 2023

ProgramaçãoR
Código
fg071333
Banca
FGV
Órgão
TCE-ES
Ano
2023
Nível
Superior
Cargo
Auditor de Controle Externo - Estatística
Uma base de dados consiste em 10 milhões de observações de pesos de adultos saudáveis. Suponha que se deseja calcular a proporção de indivíduos amostrados que tem peso maior ou igual a L e menor ou igual a U, com U > L.Se os valores estão guardados em um vetor chamado “pesos”, o comando R que calcula corretamente a proporção desejada é:
  1. Asum( (pesos <= L) * (pesos >= U) );
  2. Bsum( (pesos >= L) + (pesos <= U) );
  3. Cmean( (pesos >= L) * (pesos <= U) );
  4. Dmean( (pesos <= L) * (pesos >= U) );
  5. Emean( (pesos <= L) + (pesos >= U) ).
Revelar gabarito e comentário

GabaritoC — mean( (pesos >= L) * (pesos <= U) );

Comentário gerado por IA. É um apoio ao estudo, ancorado em fontes, mas pode conter imprecisões — confira sempre na fonte oficial (lei, súmula, edital e gabarito da banca). Encontrou um erro? Use “Reportar”.

Cálculo de proporção no R – operações lógicas vetorizadas

Gabarito: letra C. O comando mean( (pesos >= L) * (pesos <= U) ) calcula corretamente a proporção de observações no intervalo [L, U] porque:

  • pesos >= L e pesos <= U geram vetores lógicos (TRUE/FALSE).

  • O operador * atua como E lógico: o resultado só é TRUE (1) quando ambas as condições são verdadeiras.

  • mean() de um vetor numérico (TRUE=1, FALSE=0) retorna a média, que é exatamente a proporção de 1's.

A banca testa a compreensão de vetorização e coerção de tipos lógicos em R.

  1. 1pesos >= L (vetor lógico)
  2. 2pesos <= U (vetor lógico)
  3. 3* (AND lógico) → TRUE=1, FALSE=0
  4. 4mean() → proporção de 1's
LEVEL · soulevel.com.br

Alternativa A — ❌ Incorreta

sum( (pesos <= L) * (pesos >= U) ) – Inverte os operadores: <= L e >= U selecionam observações MENORES ou IGUAIS a L e MAIORES ou IGUAIS a U, ou seja, fora do intervalo desejado (exceto possíveis interseções em L=U, mas isso não é o caso geral). Além disso, sum() retorna a contagem, não a proporção.

Alternativa B — ❌ Incorreta

sum( (pesos >= L) + (pesos <= U) ) – O operador + soma os vetores lógicos (coercionados para 0/1), resultando em valores 0, 1 ou 2. A soma total não equivale ao número de observações no intervalo (porque observações com ambas as condições verdadeiras contam 2, e as com nenhuma condição verdadeira contam 0). Também não divide pelo total.

Alternativa C — ✅ Correta ⟵ GABARITO

mean( (pesos >= L) * (pesos <= U) )pesos >= L e pesos <= U são vetores lógicos. O produto * equivale ao AND lógico: cada elemento será 1 se ambas as condições forem TRUE, 0 caso contrário. mean() calcula a proporção de 1's, ou seja, a fração de observações no intervalo [L, U].

Alternativa D — ❌ Incorreta

mean( (pesos <= L) * (pesos >= U) ) – Mesmo erro da alternativa A: inverte os operadores de comparação, selecionando valores fora do intervalo. Embora use mean(), a condição lógica está errada.

Alternativa E — ❌ Incorreta

mean( (pesos <= L) + (pesos >= U) ) – O operador + produz valores 0, 1 ou 2, como na alternativa B. A média desses valores não é a proporção desejada (por exemplo, observações com ambas as condições verdadeiras geram 2, distorcendo a média).

NÃO CAIA NESSA!

A banca explora a confusão entre operadores lógicos (* para AND e + para OR) e a inversão dos sinais de comparação. Lembre-se: para um intervalo fechado [L,U], use >= L e <= U combinados com *. A função mean() já entrega a proporção; sum() exigiria divisão por length().

Gabarito: letra C.

Link permanente: /questoes/fg071333