我想做一個有條件的cumsum。我原本以爲我可以使用Reduce功能,但我不能。要解釋清楚: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似乎找到了一種方法來標記這個問題爲已關閉由於版主繼續刪除我添加的任何東西,但沒有建議關閉的正確方法。
我不明白這是怎麼遞歸?你的例子也需要更清楚。作爲一個例子給出確切的預期結果。不要只是描述它。 – 2013-03-14 14:09:50
我已經通過將它放在函數格式中闡明瞭遞歸。當然,沒有明確的「預期答案」,因爲涉及到隨機性。如果你喜歡,我可以使用一些固定值來使它更清晰,但我不希望讀者使用固定的數學公式來回答,我想了解如何使用高階函數來完成此操作。 – user1480926 2013-03-14 14:20:27
@ user1480926我不認爲這是Reduce的一項工作。首先你不能給矩陣來減少。你可以給一個向量(也許你可以創建一個向量,你可以在a和b之間交替)其次,你的索引變量必須是全局變量,比如'index << - index + 1'... – agstudy 2013-03-14 15:59:24