2016-03-06 124 views
0

我有一个矩阵“Mat.return”,有390行和2749列,我想创建2499个子矩阵,每个矩阵有250列和80行。如何在R中创建子矩阵?

第一子矩阵将是:

B1=(Mat.return)[sample(nrow((Mat.return)),size=80,replace=TRUE),][,c(1:250)] 

第二个,将从“Mat.return”的第二列开始和将选择250个以下的列。因此,这将是:

B2=(Mat.return)[sample(nrow((Mat.return)),size=80,replace=TRUE),][,c(2:251)] 

第三人会从第三列开始和将选择250以下的柱,等[直至矩阵N°2499]

是否有一个函数或代码这可以做到这一点,而不是手动计算它?

谢谢!

+0

这听起来像是一个x-y问题。你想解决什么大问题? – Heroka

回答

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] 
+0

谢谢,这正是我需要的! –

+0

酷!不要忘记验证答案以结束问题。 :) 谢谢! – cderv