2014-01-18 209 views
2

我有相同尺寸矩陣的列表,例如:計算彙總統計

mat.list=rep(list(matrix(rnorm(n=12,mean=1,sd=1), nrow = 3, ncol=4)),3) 

我想要做的是品嚐多次從每一個隨機列矩陣列表,例如一個給定的樣本中的列索引進行採樣,分別是:

set.seed(10) #for reproducibility 
idx.vec = sample(1:ncol(mat.list[[1]]),length(mat.list)) 

function將返回採樣列的矩陣:

sample.mat = mapply('[', mat.list, TRUE, idx.vec) 

對於每個這樣的樣本矩陣,我想計算每行的均值和方差。因此,結果將是樣本上平均值的矩陣和樣本上方差的矩陣,這樣這些矩陣的維數就是列表中矩陣的行數,即樣本數。

什麼是最有效的(時間和空間)方式來做到這一點?

回答

1

我會用replicaterowMeans的均值和rowSdsmatrixStats

ll <- length(mat.list) 
nn <- ncol(mat.list[[1]]) 

replicate(3,{ 
    idx.vec = sample(seq_len(nn),ll) 
    sample.mat = mapply('[', mat.list, TRUE, idx.vec) 
    list(mm = rowMeans(sample.mat),sd = rowSds(sample.mat)) 
},simplify=FALSE)