компилятор из ключевого слова в подсказку об отсутствии псевдонимов блоков памяти между тремя массивами.
жно, очень тупой вопрос.
Я пытаюсь "векторизовать" следующий цикл:
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
Я думаю это простоx[sig]
но результат не совпадает.
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
В чем дело?
замечание
Очевидно из вывода мы видим, чтоfor
петля иx[sig]
разные. Смысл последнего ясен: перестановка, поэтому многие люди склонны считать, что цикл просто делает что-то не так. Но никогда не будь так уверен; это может быть какой-то четко определенный динамический процесс. Целью этих вопросов и ответов является не оценка правильности, а объяснение того, почему они не эквивалентны. Надеемся, что это послужит хорошим примером для понимания «векторизации».