Я хочу сделать условную cumsum. Первоначально я думал, что могу использовать функцию «Уменьшить», но я не смог. Для того, чтобы четко объяснить:R - преобразование рекурсивного кода в функциональное программирование
a <- rep(1,5)
b <- rnorm(n=5,mean=0.5)
c <- rep(2,5)
d <- rep(0.5,5)
Reduce('+', a, init=200 , accumulate=TRUE)
Результаты в
[1] 200 201 202 203 204 205
Это так же, как простой cumsum. Но то, что я на самом деле хочу это условное cumsum:
Рекурсия определяется как:.
x0 = 200
index = 0
function (x) {
index = index + 1
if(x is between 200 and 202) return x + a[index]
else if(x is between 202 and 204) return x + b[index]
else if(x is between 204 and 206) return x + c[index]
else return x + d[index]
}
Ожидаемый результат может быть что-то вроде этого (конечно, никогда не будет таким же, из-за хаотичности
[1] 200 201 202.3 203.8 204.1 205
Для тех, кому интересно, то ответ можно найти здесь: Convert simple recursive relation to functional program
Я могу» t, похоже, нашел способ отметить этот вопрос, так как закрыт, так как модераторы продолжают удалять все, что я добавляю, не предлагая правильный способ закрыть.
Я не понимаю, как это рекурсия? Также ваш пример должен быть более понятным. В качестве примера также укажите точный желаемый результат. Не просто описывайте это. –
Я уточнил рекурсию, поместив ее в формат функции. Разумеется, нет четкого «ожидаемого ответа», потому что есть случайность. Я могу, возможно, сделать это более ясным, используя некоторые фиксированные значения, если вам нравится, но я не хочу, чтобы читатели отвечали с использованием фиксированной математической формулы, я хочу понять, как это сделать, используя функции более высокого порядка. – user1480926
@ user1480926 Я не думаю, что это работа для Сокращения. Сначала вы не можете дать матрицу для уменьшения. Вы можете просто указать вектор (возможно, вы можете создать вектор, в котором вы будете чередоваться между a и b). Вторая ваша индексная переменная должна быть глобальной, что-то вроде «index << - index + 1' ... – agstudy