应用sapply循环数字索引

时间:2014-12-13 10:03:57

标签: r loops sapply

我有一个名为rainfal的矩阵(315576乘19矩阵)。我想将这个矩阵的每一列转换成一个24列的矩阵,这样我就可以得到19个24列矩阵。我已经尝试过这些代码,但仍然有问题可以获得所需的结果。

sapply(seq_along(rainfal), function(i) {
    matrix(rainfal[, i], nrow(rainfal)/24, 24, byrow=TRUE)
})

任何帮助将不胜感激。提前谢谢。

2 个答案:

答案 0 :(得分:1)

如果您想要list

中的每个矩阵
res <-  lapply(seq_len(ncol(rainfall)), function(i) 
                   matrix(rainfall[,i], ncol=24, byrow=TRUE) )

sapply(res, dim)
#   [,1]  [,2]  [,3]  [,4]  [,5]  [,6]  [,7]  [,8]  [,9] [,10] [,11] [,12]
#[1,] 13149 13149 13149 13149 13149 13149 13149 13149 13149 13149 13149 13149
#[2,]    24    24    24    24    24    24    24    24    24    24    24    24
#   [,13] [,14] [,15] [,16] [,17] [,18] [,19]
#[1,] 13149 13149 13149 13149 13149 13149 13149
#[2,]    24    24    24    24    24    24    24

数据

 set.seed(24)
 rainfall <- matrix(sample(1:20, 315576*19, replace=TRUE), ncol=19)

答案 1 :(得分:0)

这是另一种方法,使用R中的矩阵属性:

M <- matrix(1:(19*315576) ,nc=19)   # 315576 rows, 19 columns; just an example
dim(M) <- c(315576/24,24,19)

因此,这需要一个具有315,576行和19列的二维矩阵M,并将其“重新”维度为三维矩阵;基本上是19个矩阵,每个矩阵有315576/24行和24列。然后,如果你更喜欢列表中的19个矩阵,你可以这样做:

lst <- lapply(1:19,function(i)M[,,i])