Por que "vetorizar" esse loop R simples dá um resultado diferent
alvez uma pergunta muito idiot
Estou tentando "vetorizar" o seguinte loop:
set.seed(0)
x <- round(runif(10), 2)
# [1] 0.90 0.27 0.37 0.57 0.91 0.20 0.90 0.94 0.66 0.63
sig <- sample.int(10)
# [1] 1 2 9 5 3 4 8 6 7 10
for (i in seq_along(sig)) x[i] <- x[sig[i]]
x
# [1] 0.90 0.27 0.66 0.91 0.66 0.91 0.94 0.91 0.94 0.63
Eu acho que é simplesmentex[sig]
mas o resultado não corresponde.
set.seed(0)
x <- round(runif(10), 2)
x[] <- x[sig]
x
# [1] 0.90 0.27 0.66 0.91 0.37 0.57 0.94 0.20 0.90 0.63
O que há de errado
Observaçã
Obviamente, a partir da saída, vemos que ofor
loop ex[sig]
são diferentes. O significado deste último é claro: permutação; portanto, muitas pessoas tendem a acreditar que o loop está apenas fazendo coisas erradas. Mas nunca tenha tanta certeza; pode ser um processo dinâmico bem definido. O objetivo destas perguntas e respostas não é julgar o que é correto, mas explicar por que elas não são equivalentes. Espero que ele forneça um estudo de caso sólido para entender a "vetorização".