如何在R中创建子矩阵?

时间:2016-03-06 19:05:13

标签: r matrix

我有一个带有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]

是否有可以执行此操作的功能或代码,而不是手动计算?

谢谢!

1 个答案:

答案 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]