Векторизовать расчет продукта, который зависит от предыдущих элементов?

Я пытаюсь ускорить / векторизовать некоторые вычисления во временном ряду. Могу ли я векторизовать вычисление в цикле for, которое может зависеть от результатов предыдущей итерации? Например:

z <- c(1,1,0,0,0,0)
zi <- 2:6
for  (i in zi) {z[i] <- ifelse (z[i-1]== 1, 1, 0) }

использует значения z [i], обновленные на предыдущих шагах:

> z
[1] 1 1 1 1 1 1

В моих усилиях по векторизации этого

z <- c(1,1,0,0,0,0)
z[zi] <- ifelse( z[zi-1] == 1, 1, 0)

поэлементные операции не используют результаты, обновленные в операции:

> z
[1] 1 1 1 0 0 0

Таким образом, эта векторизованная операция работает «параллельно», а не итеративно. Есть ли способ записать / векторизовать это, чтобы получить результаты цикла for?

20
задан smci 28 May 2018 в 09:42
поделиться