例如: 设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。
答案 0 :(得分:0)
让我们采取简单的案例,你可以从那里扩展
说n = 100,开发你的开始次数
n<-100
byParam<-10
starts<-seq(1, n-(byParam-1), by=byParam)
然后lapply
tmp_list<-lapply(starts, function(startIndex) M[, startIndex:(startIndex+(byParam-1)])
只有一种方法,如果n不是10的很好的倍数(或者你设置的&#34; byParam&#34;等于),那就变得有点复杂了。如果是这种情况,那么你可以开发你的开始和结束,然后使用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次。