例如:令M为某个矩阵mXn矩阵,其中n足够大以至于无法手动输入。
tmp_list [1] <-M [,1:10]
tmp_list [2] <-M [,11:20]
。。。
tmp_list [last] <-M [end-9,end]
我正在研究的问题有点像蒙特卡罗,重复了一个涉及随机mXn矩阵的实验100K次。我对R还是很陌生,我已经使用了for循环来完成它,但是显然花费了很长时间。因此,我希望将每个“实验”分配给列表的元素并使用lapply。
让我们来看一个简单的案例,您可以从那里扩展它
假设n = 100,发展您的起点
n<-100
byParam<-10
starts<-seq(1, n-(byParam-1), by=byParam)
然后l
tmp_list<-lapply(starts, function(startIndex) M[, startIndex:(startIndex+(byParam-1)])
如果n不是10的整数倍(或者您将“ byParam”设置为等于),则只有一种方法变得更加复杂。如果是这种情况,则可以开发起始索引和结束索引,然后使用mapply代替
#given start and end indeces
tmp_list<-mapply(function(startInd, endInd){
M[, startInd:endInd},
startInd=starts, endInd=ends)
现在lapply和mapply仍然是迭代的,所以我不希望在时间效率上有大的改进
编辑
在评论中进行讨论之后,这里是整个设置的解决方案,而不仅仅是上述问题
tmp_list<-lapply(1:1000, function(i){
vect<-sample(c(0,1), 10*1000, replace=TRUE)
dim(vect)<-c(10, 1000)
vect
})
让我们分解一下,它使一切变得非常简单。
我们首先创建一个长度为10 * 1000(每个子矩阵中元素的数量)的1和0的随机样本。然后,我们可以通过将向量的dim属性分配为c(10,1000)来将其整齐地转换为矩阵,从而将其形式更改为10行和1000列。然后,将其返回到索引i的列表中。我们套用超过1:1000,或迭代1000次。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句