🎯 Saiba o que estudar

Avançado com Treinador a partir de R$ 0,76/dia

Considere o trecho de código na linguagem R destacado. df...

Próximas questões
Com base no mesmo assunto
Q4196037 Programação
Considere o trecho de código na linguagem R destacado.

df <–
data.frame(
  natureza_despesa = c(
   3.1.90.11.01 ,
   3.1.90.11.01 ,
   3.1.90.11.33 ,
   3.1.90.11.33
  ),
   valor_empenhado = c(45291.59, 134963.54,
4538.38,1200.64)
)
função_placeholder(df$valor_empenhado,
df$natureza_despesa, sum)

Um analista de dados da prefeitura deseja somar o valor total empenhado por natureza de despesa.

Qual função da família apply da linguagem R ele deve substituir no lugar de função_placeholder?
Alternativas

Gabarito comentado

Confira o gabarito comentado por um dos nossos professores

Gabarito: D

Fundamento decisivo: O elemento decisivo é o padrão de agrupamento: um vetor numérico, um vetor de categorias e uma função de agregação. Nesse cenário, a função da família apply adequada é tapply.

Tema central: Agrupamento com tapply
Análise das alternativas
A
Errada
apply está errada porque opera sobre margens de matrizes ou arrays, com parâmetro de margem, e não sobre um vetor particionado por um índice de agrupamento no formato apresentado. A chamada dada não pede estrutura matricial nem usa o padrão exigido por apply.
B
Errada
mapply está errada porque faz aplicação multivariada, isto é, elemento a elemento sobre múltiplos argumentos, e não agregação de um vetor por grupos definidos por outro vetor. O problema pede sumarização por categoria, não aplicação paralela entre vetores.
C
Errada
sapply está errada porque aplica uma função sobre elementos de um vetor ou lista e simplifica o resultado, mas não trabalha com um argumento de índice para formar subconjuntos por categoria. Falta nela o padrão de agrupamento necessário para somar por natureza_despesa.
D
Certa
A alternativa D está certa porque tapply aplica uma função a subconjuntos de um vetor definidos por um fator ou índice de agrupamento. No trecho dado, valor_empenhado é o vetor a ser agregado, natureza_despesa é o critério de agrupamento e sum é a função aplicada a cada subconjunto.
E
Errada
lapply está errada porque aplica função sobre cada elemento de uma lista ou vetor e retorna lista, sem mecanismo de agrupamento por fator. A necessidade da questão não é iterar elemento por elemento, mas agregar valores conforme um índice categórico.
Pegadinha da questão
A confusão explorada é tratar qualquer função da família apply como se servisse para agrupamento por categoria. A chave era perceber que o enunciado exigia agregação de um vetor por grupos definidos em outro vetor, o que afasta apply, sapply, lapply e mapply.
Dica para questões semelhantes
  • Se a chamada tiver a estrutura vetor de valores + vetor de grupos + função de agregação, procure tapply.
  • Se houver necessidade de particionar um vetor por categorias antes de aplicar sum, mean ou função semelhante, o critério relevante é a existência de INDEX de agrupamento.
  • Não escolha apply só por pertencer à família apply; confirme se o objeto é matriz/array ou se a tarefa é agrupamento por fator.

Clique para visualizar este gabarito

Visualize o gabarito desta questão clicando no botão abaixo