我有一个带有390行和2749列的矩阵“Mat.return”,我想从中创建2499个子矩阵,每个子矩阵有250列和80行。
第一个子矩阵是:
.equal, .equal > div[class*='col-'] {
display: -webkit-box;
display: -moz-box;
display: -ms-flexbox;
display: -webkit-flex;
display: flex;
flex:1 0 auto;
}
第二个,将从“Mat.return”的第二列开始,并将选择250列以下。因此它将是:
B1=(Mat.return)[sample(nrow((Mat.return)),size=80,replace=TRUE),][,c(1:250)]
第三列将从第三列开始,将选择250列,依此类推[直到矩阵为2499]
是否有可以执行此操作的功能或代码,而不是手动计算?
谢谢!
答案 0 :(得分:0)
只需在你的功能周围做一个从1到2499的循环。此代码将为您提供80行和251列的2499矩阵列表
Mat.return <- matrix(rnorm(390*2749), nrow = 390, ncol = 2749)
lmat <- lapply(1:2499, function(i){
(Mat.return)[sample(nrow((Mat.return)),size=80,replace=TRUE),][,c(i:(250 + i))]
})
str(lmat, list.len = 10)
#> List of 2499
#> $ : num [1:80, 1:251] 0.493 -0.295 2.299 -1.427 -0.174 ...
#> $ : num [1:80, 1:251] -0.4 -1.632 1.21 0.529 -1.045 ...
#> $ : num [1:80, 1:251] -1.71 -1.458 0.186 0.808 -1.179 ...
#> $ : num [1:80, 1:251] 0.237 -0.952 -0.632 -0.204 -1.702 ...
#> $ : num [1:80, 1:251] -1.828 -0.895 -1.31 1.009 -0.451 ...
#> $ : num [1:80, 1:251] 0.128 0.461 -0.393 0.358 1.549 ...
#> $ : num [1:80, 1:251] -0.44814 0.52248 0.28651 0.39365 -0.00774 ...
#> $ : num [1:80, 1:251] 0.136 0.615 -0.435 -0.846 0.788 ...
#> $ : num [1:80, 1:251] 0.761 0.11 -1.486 -0.488 0.118 ...
#> $ : num [1:80, 1:251] -0.9064 -1.3382 -0.9678 0.0654 -0.5952 ...
#> [list output truncated]