Мне бы хотелось узнать наиболее эффективный (подумайте, код И скорость, если я буду запускать его на очень больших векторах или объектах), чтобы вычислить рекурсивную функцию на векторе , (для вычисления S [i] нам просто нужно S [k] с точностью до k < = (i-1) и V [k] с k < = i)Рекурсивная функция в R, примененная к вектору
Простым примером будет присвоение num vector v of длина N, чтобы вернуть вектор S, где S [I] представляет собой сумму первых г элементов ст.
в данном конкретном случае (for
) петли довольно некрасиво ... и (изм) так не эффективно делать что-то вроде
myfun <- function(i){sum(length_table[1:i])}
S <- sapply(v,myfun))
не хорошо из-за многие ненужные расчеты ...
любые предложения?
EDIT: Для меня нет слишком большой разницы между итерационным и рекурсивным. Я не знал о функции cumsum, которая решает проблему в этом конкретном случае.
ok Теперь давайте рассмотрим более общий случай, когда у нас есть (num) функция f, которая принимает два (num) аргумента, так что f (x, y) также является значением num. нам нужно также «семя». дан Num вектор v длины N,
я хотел бы построить вектор U, определяемый
U[1] = f(v[1],seed)
U[2] = f(v[2],U[1])
U[3] = f(v[3],U[2])...
U[N] = f(v[N],U[N-1])
есть хороший эффективный способ сделать это без зацикливания?
Вы ищете ' f <- функция (v, i) cumsum (v [1: i]) '? –
Ваш вопрос непонятен: если суммарная сумма является всего лишь примером (с хорошо известным решением, по выражению пользователя Pierre), какова ваша фактическая проблема? –
Согласен с обоими комментариями. Кроме того, предпосылка hte вопроса о том, что рекурсивные решения будут векторизовать, неверна. R хорошо известен хорошей поддержкой векторизованных решений и плохой поддержкой рекурсивных. Кроме того, иллюстрированный код не является действительно рекурсивным, но итеративным. –