Возможно, очень глупый вопрос.
Я пытаюсь "векторизовать" следующий цикл:
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]
различны. Смысл последнего ясен: перестановка, поэтому многие люди склонны полагать, что цикл просто делает некоторые неправильные вещи. Но никогда не будьте так уверены; это может быть некоторый четко определенный динамический процесс. Цель этого Q & A состоит не в том, чтобы судить о том, что правильно, а о том, почему они не эквивалентны. Надеюсь, это дает прочное тематическое исследование для понимания "векторизации".