R遍历多个矩阵

托比亚斯·施

我有472个矩阵,每个矩阵有405列(matrix1,...,matrix400),并且想拥有472个新矩阵,而该矩阵只有前244列。我怎样才能做到这一点?我试过了:

for (i in 1:472) {
assign(paste("new_matrix",i,sep=""), matrix[[i]][,c(1:244)])
}

我通过用一个标识符(对于组)将一个数据帧拆分来创建矩阵:

for (i in 1:472){
   assign(paste("matrix", i, sep=""), subset(data, ID==i))
}

不知何故,我无法对每个矩阵说话,但是我不知道如何做到这一点。

代恩

您显然应该采用其他方法。分配所有单个矩阵不是一个好方法。但是这是您可以做到的一种方法...

mat1 <- matrix(1:6, 2, 3)
mat2 <- matrix(2:7, 2, 3)

example_func <- function(mati) {

  mat_name <- as.name(paste0("mat", mati))
  bquote(.(mat_name) <- .(mat_name)[ , 1:2])

}

for (i in 1:2) eval(example_func(i))

但是,使用eval可能会很复杂,因为您必须非常注意环境,尤其是在函数内部使用时。作为示例,请尝试运行lapply(1:2, function(x) eval(example_func(x)))而不是使用for循环,并查看结果之间的差异。

要采用更好的方法,请参阅?split

some_data <- data.frame(ID = rep(1:4, each = 4),
                        V1 = 1:16,
                        v2 = letters[1:16])

split(some_data, list(some_data$ID))

然后,您可以使用它lapply来遍历子集并进一步迭代子集。或者更好的是,仅将原始data.frame子集化为所需的列,然后使用split

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章