2013-04-17 118 views
0

我想用不同的概率集合對一個給定的矢量進行採樣而不需要循環。有沒有辦法做到這一點?擺脫R中的for循環

例如,在這個代碼,我想用某種適用()結構或任何真正取代了環..

a <- c(1,2,3) 
p <- matrix(c(.1,.1,.8,.1,.8,.1,.8,.1,.1), nrow=3) 
s <- matrix(ncol=5, nrow=3) 
for(i in 1:nrow(p)){ 
s[i,] <- sample(a, size=5, replace=T, prob=p[i,]) 
} 

感謝您的幫助!

+0

請注意'apply'仍然使用循環(與使用矢量方法相反),但通常會產生更多可讀代碼。 –

回答

2

applyp本身:

t(apply(p, 1, sample, x=a, size=5, replace=TRUE)) 
    [,1] [,2] [,3] [,4] [,5] 
[1,] 3 3 1 3 3 
[2,] 2 2 1 1 2 
[3,] 1 1 1 1 1 

編輯我在這裏functional::Curry,直到flodel指出,這是沒有必要的,因爲apply經由...允許命名參數給出了一個自動咖喱。