2014-01-18 155 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)