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