我有一个尺寸相同的矩阵列表,例如:
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)
对于每个这样的样本矩阵,我想计算每行的均值和方差。因此,结果将是样本上均值的矩阵和样本上的方差矩阵,这样这些矩阵的维数将是数字样本中列表中矩阵的行数。
最有效(时间和空间)的方法是什么?
答案 0 :(得分:1)
我会使用replicate
,rowMeans
作为均值,rowSds
来自matrixStats
:
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)