2011-01-22 44 views
3

假設我想創建n = 3個隨機遊走路徑(pathlength = 100)給定預加矩陣(100x3)加/減1。第一路徑將在10開始,第二個爲20,第三個爲30:向量化這個for循環(當前行取決於上面的行)

set.seed(123)
given.rand.matrix <- replicate(3,sign(rnorm(100)))
path <- matrix(NA,101,3)
path[1,] = c(10,20,30)

for (j in 2:101) {
  path[j,]<-path[j-1,]+given.rand.matrix[j-1,]
}

的最終值(給出的種子和RAND矩陣)14,6,34 ...這是期望的結果......但...

問題:有沒有一種方法來矢量化for循環?問題是計算時路徑矩陣尚未完全填充。因此,用 path[2:101,]<-path[1:100,]+given.rand.matrix 代替環路主要返回NAs。我只想知道這種for循環是否可以在R中避免。

非常感謝您提前。

+0

類似最近[線程](http://stackoverflow.com/questions/4695224/is-it-possible-對矢量元素進行矢量更新) – VitoshKa 2011-01-22 21:37:56

回答

6

絕對量化的:跳過的path的初始化,並使用cumsum在矩陣:

path <- apply(rbind(c(10,20,30),given.rand.matrix), 2, cumsum) 

> head(path) 
    [,1] [,2] [,3] 
[1,] 10 20 30 
[2,] 9 19 31 
[3,] 8 20 32 
[4,] 9 19 31 
[5,] 10 18 32 
[6,] 11 17 31 
> tail(path) 
     [,1] [,2] [,3] 
[96,] 15 7 31 
[97,] 14 8 32 
[98,] 15 9 33 
[99,] 16 8 32 
[100,] 15 7 33 
[101,] 14 6 34 
+0

是的。感謝你能這麼快回復。儘管我試圖解決的實際問題比我發佈的問題稍微複雜一點,但您的回答已經指出了我正在尋找的答案存在於應用系列函數中的可能性。選中標記 – morsecode 2011-01-23 01:25:47