1
resposta

Papel da função match() dentro de Mode()

Qual o papel da função match(x, ux) dentro de Mode(x)? O resultado de :

function(x) {
    ux[which.max(tabulate(x))]
}

não é o mesmo da função original no exercício?

1 resposta

Oi Eduardo,

Sua função está incorreta. Vou explicar como a função do instrutor funciona com um exemplo em que a sua falha. A explicação é complicada e nada trivial.

Primeiramente definimos ux como todos os elementos de x, eliminando as repetições. Então se

x = [4,4,4,3,3,9,3,3,3]

temos que

ux = [4,3,9]

A função match(x, ux) devolve a posição da primeira ocorrência de cada elemento de x em ux. Vamos chamar o retorno dessa função de m. Logo, m[i] representa a primeira aparição do i-ésimo elemento de x no vetor ux. No caso,

m = [1, 1, 1, 2, 2, 3, 2, 2, 2]

Note que todo elemento de x necessariamente está presente em ux.

Com isso, utilizamos a função tabulate(m) para contar a frequência de cada elemento de m. Vamos chamar o retorno dessa função de t. No caso,

t = [3, 5, 1]

É importante ressaltar que a função tabulate devolve a frequência de cada inteiro i em t[i]. Logo, se tivermos números muito grandes, a função tabulate devolve um vetor enorme cheio de zeros. Pelos passos anteriores, garantimos que nesse ponto o maior número de m é a quantidade de elementos distintos de x.

Finalmente, a função which.max(t) devolve a posição do maior número no vetor t. Vamos chamar essa posição de j, que é exatamente a posição do elemento de maior frequência em x em ux. No caso,

j = 2

E devolvemos ux[j] que é exatamente o número 3, a moda do nosso vetor x inicial.